在调用网格文件时,还允许无返回数据。如下面的网格文件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中调用网格部分的代码如下:
//调用存储过程,其中outputData1是dfx的文件名
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();
//此时没有结果集,无法获取,hasResult为false
值得注意的是,在网格中使用了序列类型的参数,对于这样的类型,只能生成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的员工,分性别返回为两个序表。网格中使用了两个参数,指定员工的最高年龄与所在州:
此时,网格文件在执行后,将返回多个结果集
//调用存储过程,其中createTable3是dfx的文件名,?代表使用的参数
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中调用的情况和上面是相同的。