在JAVA程序中使用集算器时,除了调用一个网格文件,还可以直接执行语句。实际上,调用网格文件,也可以作为call语句直接执行。在这里我们详细了解一下如何直接执行其它语句。如:
//直接执行语句,返回结果集
st = con.createStatement();
ResultSet rs1 = st.executeQuery("=age(date(\"1/1/1990\"))");
ResultSet rs2 = st.executeQuery("=5.(~*~)");
这里用executeQuery方法直接执行以=开头的集算器表达式,并将表达式的计算结果返回为结果集,注意表达式中的双引号需要在前面添加转义符。如果仍然用前面类似的代码将结果集输出,结果如下:
可以注意到如果返回的结果为序列,那么在JDBC中会返回1列多行的结果集。也可以用另外的方法调用:
//先判断是否有结果集,再获取结果
boolean hasResult1 = st.execute("=age(date(\"1/1/1990\"))");
ResultSet rs1,rs2;
if (hasResult1) {
rs1 = st.getResultSet();
}
boolean hasResult2 = st.execute("=5.(~*~)");
if (hasResult2) {
rs2 = st.getResultSet();
}
使用execute方法时,会根据执行的语句返回是否有结果集,代码的效果和前面是相同的。
如果需要在语句中使用参数,可以使用(x1, x2,…)操作符,依次计算表达式,并返回最后一个的结果,如:
st =con.createStatement();
ResultSet rs1 = st.executeQuery("=(pi=3.14,r=4,r*r*pi)");
计算圆的面积,输出结果集如下:
在执行语句时,语句中可以使用参数,按照PreparedStatement中的设定顺序,在语句中用固定的名称arg1,arg2,…等调用。如:
PreparedStatement pst = con.prepareStatement("=arg1*arg1*arg2");
pst.setObject(1,3);
pst.setObject(2,3.14);
ResultSet rs = pst.executeQuery();
计算半径为3的圆面积,输出结果集如下:
在集算器JDBC中还可以使用$开头的数据集查询语句。如:
//执行数据库查询语句
st = con.createStatement();
ResultSet rs1 = st.executeQuery("$(demo) select * from CITIES where POPULATION > 2000000");
注意此时使用的数据集demo,需要在配置中设为自动连接。结果如下:
在调用网格文件时,可以使用文件名,而省略call,如:
st =con.createStatement();
boolean hasResult1 = st.execute("createTable3 30,\"California\"");
执行时,会调用网格文件createTable3.dfx。如果文件中需要设入参数,参数需要在语句中写定,且与文件名之间用空格分隔。上面语句执行后,同样能够返回多结果集,结果和前面是相同的:
在JDBC中,还可以执行一片多行多列的网格代码。执行时,需要将代码拼为一个字符串,行之间用\n分隔,同一行的各列之间用\t分隔。如:
ResultSet rs = st.executeQuery("=[1,1]\nfor 10\t>A1=A1|(A1.m(-1)+A1.m(-2))\nreturn A1");");
执行这个字符串时,相当于计算下面的网格:
|
A |
B |
1 |
=[1,1] |
|
2 |
for 10 |
>A1=A1|(A1.m(-1)+A1.m(-2)) |
3 |
return A1 |
|
如果将得到的ResultSet输出,则结果如下: