在1.3用JAVA调用的基本方法中,我们了解了如何在JAVA程序中调用一个网格文件。在这里我们详细了解一下如何调用不同的网格文件。先来看下面的网格文件createTable2.dfx:
|
A |
B |
1 |
=connect("demo") |
|
2 |
=A1.query("select * from EMPLOYEE") |
=A2.select(month(BIRTHDAY)==month(Date)&&day(BIRTHDAY)==day(Date)) |
3 |
>A1.close() |
|
4 |
if B2.len()>1 |
return B2.new(EID,NAME+ " "+ SURNAME:NAME, GENDER, BIRTHDAY) |
5 |
else |
return "None" |
在这个网格文件中,需要从数据源demo中获取数据,同时使用了日期类型的参数Date:
在网格中使用的demo数据源,需要在raqsoftConfig.xml文件中配置,具体方法可以参考6.3JDBC部署。在网格中创建的数据源连接,在使用后应该用db.close() 函数关闭。
在JAVA中调用时,建立连接、输出结果等部分的代码是完全相同的,调用文件部分如下:
//调用存储过程,其中createTable2是dfx的文件名,?代表使用的参数
st =con.prepareCall("call createTable2(?)");
//设置参数
java.util.Calendar calendar = java.util.Calendar.getInstance();
calendar.set(1980, 0, 1);
st.setObject(1, calendar.getTime());
//执行存储过程
st.execute();
//获取结果集
ResultSet rs = st.getResultSet();
这个网格文件包含一个参数,因此调用时使用"call createTable2(?)",其中的 ? 代表需要输入的参数。在这种情况下需要用st.setObject() 方法输入参数。输入参数时,将按次序设入参数,而与网格中参数的名称无关。网格文件将根据输入的日期列出生日与之在同一天的员工,需要注意的是在Calendar类中设置日期时,月份是从0开始的。结果集输出如下:
在输入参数时,除了直接按照类型输入参数对象,日期类型的参数也可以输入字符串,由集算器自动解析:
//设置参数
st.setObject(1, "1/1/1980");
注意输入字符串需要符合raqsoftConfig.xml文件中设置的日期格式。程序运行的结果和上面是相同的。
除了上面的调用方法,还可以把参数写定在语句中,如:
//调用存储过程,其中createTable2是dfx的文件名,在语句中写定参数
st =con.prepareCall("call createTable2(\"2/29/1980\")");
//执行存储过程
st.execute();
//获取结果集
ResultSet rs = st.getResultSet();
使用这样的调用方法时,不能根据参数类型输入对象,而只能使用数值型参数,或使用字符串型参数交由集算器解析。计算后,结果如下:
由于没有找到2月29日出生的员工,因此在网格的B5格中用return语句返回了字符串None。从上面的结果中我们可以发现,即使从网格返回的数据是单值,也会自动生成结果集中的列名,作为标准ResultSet返回。