Java 中如何为 SQL 传递数组参数
Java中动态传递数组参数执行下面的 SQL:
select * from employee where STATE in (?)
通常要对数组参数采用拼串方式,操作比较麻烦。
借助 SPL 可以直接使用数组参数传递给 SQL 进行查询。
1. 集算器参数设置:
参数 state 为要传递的州数组。
2. 编写脚本demo.dfx:
A | B | |
1 | =connect("db") | / 连接数据库 |
2 | =A1.query@x("select * from EMPLOYEE where STATE in (?)", state) | / 查询所给州的员工记录。 |
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() {
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 查询。