Java 中如何为 SQL 传递数组参数

Java中动态传递数组参数执行下面的 SQL:
select * from employee where STATE in (?)

通常要对数组参数采用拼串方式,操作比较麻烦。
借助 SPL 可以直接使用数组参数传递给 SQL 进行查询。

1.    集算器参数设置:

a100png
参数 state 为要传递的州数组。

2.    编写脚本demo.dfx

A B
1 =connect("db") / 连接数据库
2 =A1.query@x("select *   from EMPLOYEE where STATE in (?)", state) / 查询所给州的员工记录。
  3.      调试执行时,设置数组参数 state=[Arkansas, California, Colorado] 作为 SQL in 的查询条件,执行脚本返回结果:
A3 EID NAME SURNAME GENDER STATE BIRTHDAY HIREDATE
1 Rebecca Moore F California 1974-11-20 2005-03-11
6 Matthew Johnson M California 1984-07-07 2005-07-07
8 Megan Wilson F California 1979-04-19 1984-04-19
23 Joseph Turner M California 1983-08-27 2003-08-27
27 Alexis Jones F California 1983-12-27 2003-12-27
... ... ...

Java中调用这段脚本:
public static void doWork() {

    Connection con = null;
    java.sql.PreparedStatement st = null;
   
    try{
        Class.forName("com.esproc.jdbc.InternalDriver");
        con = DriverManager.getConnection("jdbc:esproc:local://"); 
        // 调用脚本 demo.dfx
        st=con.createStatement(); 
        st =con.prepareCall("call demo (?)"); 

        st.setObject(1, new String[]{“Arkansas”,"California","Colorado"}); 
        st.execute();
        // 获取结果集
        ResultSet rst = st.getResultSet();
        System.out.println(rst);
    }catch(Exception e){
        System.out.println(e);
    }finally{
        // 关闭连接
        if (con!=null) {
            try {
                con.close();
            }catch(Exception e) {
                System.out.println(e);
            }
        }  
    }
}

如果 s="Arkansas, California, Colorado"作为字符串参数传递,可使用 s.split@c() 转换成数组形式进行查询。SPL 支持多样化的输入参数方式进行 SQL 查询。