我在我的Javascript程序中可以访问这个Java类的实例
public class ContentProvider {
public Object c(int n) {
switch (n) {
case 1: return 1.1;
case 2: return 2.2;
case 3: return 3.3;
case 4: return "4";
case 5: return new java.util.Date();
}
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
这是main()中的代码:
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("JavaScript");
engine.put("ctx", new ContentProvider());
res = engine.eval("ctx.c(1)");
System.out.printf("rhino:> %s (%s)%n"
, res
, res != null ? res.getClass().getName() : null
);
Run Code Online (Sandbox Code Playgroud)
简单的表达式ctx.c(1)打印:
rhino:> 1.1 (java.lang.Double)
Run Code Online (Sandbox Code Playgroud)
现在这里发生的事情是ctx.c(1) + ctx.c(2): …
例如:
create table test (id numeric, t date not null);
create trigger test_in
before insert on test
for each row
when New.t is null
begin
-- set New.t = now();
end;
Run Code Online (Sandbox Code Playgroud)
设置New.t不起作用,其中只能选择/插入/更新/删除stmt. 我无法更改数据库结构(可以设置默认值).插入触发器后也因为"not null"约束而不适合.我找到的唯一解决方案:
insert into test values (New.id, now());
select raise(ignore);
Run Code Online (Sandbox Code Playgroud)
测试数据库仅用于说明目的,实际上存在计算数据的更复杂的情况.可能有这样的"更新New set New.t = now()",或不?