描述:
通过集算器jdbc执行脚本文件,用于传递多组参数的场景。
语法:
calls path/spl(…)
备注:
通过集算器jdbc执行spl脚本文件,用于传递多组参数的场景。
path为spl脚本文件路径,查找spl文件时,优先寻找本地路径,找不到则在服务器上找(服务器列表在raqsoftConfig.xml文件中配置)。
类似常规数据库驱动中调用存储过程的方式,收集批量参数组成的序列传给脚本执行,用con.prepareCall()调用语句,Statement生成后,用st. executeQuery()执行,并返回结果集。
calls path/spl(…)语法中的“(…)”可省略,缺省按脚本本身的参数顺序依次传入。
参数:
path |
文件的相对寻址路径或绝对路径,省略表示相对寻址路径。 |
spl |
.splx/.spl/.dfx格式的脚本文件,扩展名以.splx/.spl/.dfx为序找。 |
… |
向spl中传递的参数值,将按顺序传入脚本文件spl的各参数中,与spl中的参数名无关,多参数时用逗号隔开。 |
示例:
demo_calls_splx.splx网格文件内容如下,Department和Salary为网格参数:
|
A |
B |
1 |
for (Department.len() |
|
2 |
|
=@|file("Employee.csv").import@ct().select(DEPT==Department(A1)&&SALARY>Salary(A1)) |
测试代码如下:
public void testDataServer(){
Connection con = null;
java.sql.PreparedStatement st;
try{
//建立连接
Class.forName("com.esproc.jdbc.InternalDriver");
con= DriverManager.getConnection("jdbc:esproc:local://");
//有多组参数时,需要使用addBatch()
CallableStatement cst = con.prepareCall("calls demo_calls_splx(?,?)");
final String[] DEPTS = new String[] { "R&D", "Sales", "Marketing" };
for (int i = 0; i < DEPTS.length; i++) {
cst.setString(1, DEPTS[i]);
cst.setInt(2, 12000);
cst.addBatch();
}
ResultSet set = cst.executeQuery();
//(2) 有一组参数时,可以设置参数后直接执行:
/* CallableStatement cst = con.prepareCall("calls demo_calls_splx(?,?)");
cst.setString(1, "R&D");
cst.setInt(2, 15000);
ResultSet set = cst.executeQuery(); */
//(3)也可以使用静态参数:
/* CallableStatement cst = con.prepareCall("calls demo_calls_splx(\"R&D\",15000)");
ResultSet set = cst.executeQuery();*/
ResultSetMetaData meta = set.getMetaData();
while (set.next()) {
for(int i=0; i<meta.getColumnCount(); i++){
System.out.print(set.getObject(i+1) + "\t");
}
System.out.println();
}
}
catch(Exception e){
System.out.println(e);
}
finally{
//关闭连接
if (con!=null) {
try {
con.close();
}
catch(Exception e) {
System.out.println(e);
}
}
}
}