6.2.3无结果集和多个结果集

在调用网格文件时,还允许无返回数据。如下面的网格文件outputData1.dfx

 

A

1

$(demo) select * from CITIES

2

=A1.select(Arg.pos(left(NAME,1))>0)

3

=file("Cities.txt")

4

>A3.export@t(A2)

文件中使用了字符串序列类型的参数Arg

A1中,直接调用了demo数据库执行查询,而没有用connect语句创建连接。这种时候,需要raqsoftConfig.xml文件中数据库配置中,demo数据源的autoConnect属性为true

  <property name="autoConnect" value="true"/>

具体配置可以参考6.3JDBC部署。在JAVA中调用网格部分的代码如下:

  //调用存储过程,其中outputData1dfx的文件名

  st =con.prepareCall("call outputData1(?)");

  //设置参数

  com.raqsoft.dm.Sequence seq = new com.raqsoft.dm.Sequence();

  seq.add("A");

  seq.add("B");

  seq.add("C");

  st.setObject(1, seq);

  //执行存储过程

  boolean hasResult = st.execute();

  //此时没有结果集,无法获取,hasResultfalse

值得注意的是,在网格中使用了序列类型的参数,对于这样的类型,只能生成Sequence对象设入。设入序列参数[A,B,C]后,将首字母为A,B,C的城市信息输出到文件Cities.txt。当网格中使用的文件未指定路径时,将存入主路径中,由raqsoftConfig.xml文件的<mainPath/>节点所指定。文件中数据如下:

一个网格文件也可能返回多个结果集,如下面的网格文件createTable3.dfx

 

A

B

1

$(demo) select EID, NAME+' '+SURNAME FULLNAME, GENDER, STATE, BIRTHDAY from EMPLOYEE

 

2

=A1.select(STATE == state && age(BIRTHDAY)<age)

 

3

=A2.select(GENDER=="F")

=A2\A3

4

return A3

return B3

这个网格将年龄小于设定的age,以及在指定州state的员工,分性别返回为两个序表。网格中使用了两个参数,指定员工的最高年龄与所在州:

此时,网格文件在执行后,将返回多个结果集

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

  st =con.prepareCall("call createTable3(?,?)");

  //依次设置参数

  st.setObject(1, 30);

  st.setObject(2, "California");

  //执行存储过程

  boolean hasResult = st.execute();

  //获取多个结果集并输出结果

  while (hasResult) {

  ResultSet rs = st.getResultSet();

  //输出结果

  ResultSetMetaData rsmd = rs.getMetaData();

  int colCount = rsmd.getColumnCount();

  for ( int c = 1; c <= colCount;c++) {

  String title = rsmd.getColumnName(c);

  if ( c > 1 ) {

  System.out.print("\t");

  }

  else {

  System.out.print("\n");

  }

  System.out.print(title);

  }

  while (rs.next()) {

  for (int c = 1; c<= colCount; c++) {

  if ( c > 1 ) {

  System.out.print("\t");

  }

  else {

  System.out.print("\n");

  }

  Object o = rs.getObject(c);

  System.out.print(o.toString());

  }

  }

  System.out.println();

  //查看是否返回了其它结果集

  hasResult = st.getMoreResults();

  }

执行后,分别读出California州且30岁以下的女员工与男员工,输出结果如下:

网格文件createTable3.dfx中,两个排列也可以用一条语句返回:return A3,B3,在JAVA中调用的情况和上面是相同的。