6.2.2调用不同的网格文件

1.3JAVA调用的基本方法中,我们了解了如何在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中调用时,建立连接、输出结果等部分的代码是完全相同的,调用文件部分如下:

  //调用存储过程,其中createTable2dfx的文件名,?代表使用的参数

  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文件中设置的日期格式。程序运行的结果和上面是相同的。

 

除了上面的调用方法,还可以把参数写定在语句中,如:

  //调用存储过程,其中createTable2dfx的文件名,在语句中写定参数

  st =con.prepareCall("call createTable2(\"2/29/1980\")");

  //执行存储过程

  st.execute();

  //获取结果集

  ResultSet rs = st.getResultSet();

使用这样的调用方法时,不能根据参数类型输入对象,而只能使用数值型参数,或使用字符串型参数交由集算器解析。计算后,结果如下:

由于没有找到229日出生的员工,因此在网格的B5格中用return语句返回了字符串None。从上面的结果中我们可以发现,即使从网格返回的数据是单值,也会自动生成结果集中的列名,作为标准ResultSet返回。