calls path/spl( … )

阅读(1935) 标签: jdbc, 多组参数, 寻找程序文件,

描述:

通过集算器jdbc,在本地寻找程序文件执行,找不到则到服务器上找,用于传递多组参数的场景。

语法:

calls path/spl(…)

备注:

传入参数调用需要执行的脚本文件spl,先在本地寻找带路径的或相对寻址路径的网格文件,找不到则到服务器上找(服务器列表在raqsoftConfig.xml文件中配置),完成计算后,返回结果集拼成序列;多结果集的情况下,返回多个结果拼成的序列。

类似一般数据库驱动中的存储过程的调用方式,收集批量参数组成的序列传给脚本执行,用con.prepareCall()调用语句,Statement生成后,用st. executeQuery()执行,并返回结果集。

调用calls时使用参数arg1…,这些参数值将依次设入脚本文件的各个参数中,与脚本文件参数列表中的参数名无关。

calls path/spl(…)语法中的“(…)”可省略,缺省则按脚本本身的参数次序依次传入。

参数:

path

文件的相对寻址路径或绝对路径,省略表示相对寻址路径。

dfx

脚本文件.splx/.spl/.dfx,扩展名用.splx/.spl/.dfx为序找。

参数,多参数时用逗号隔开,接收参数的参数名不会用到,而是按照参数的顺序来依次赋值。

示例:

demo_calls_dfx.dfx网格文件内容如下,DepartmentSalary为网格参数:

 

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_dfx(?,?)");

  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_dfx(?,?)");

  cst.setString(1, "R&D");

  cst.setInt(2, 15000);

  ResultSet set = cst.executeQuery(); */

  //(3)也可以使用静态参数:

  /*  CallableStatement cst = con.prepareCall("calls demo_calls_dfx(\"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);

    }

    }

    }

     }