calls path/spl( … )

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

描述:

通过集算器jdbc执行脚本文件,用于传递多组参数的场景。

语法:

calls path/spl(…)

备注:

通过集算器jdbc执行spl脚本文件,用于传递多组参数的场景。

pathspl脚本文件路径,查找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网格文件内容如下,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_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);

      }

      }

      }

         }