我有一些JDBC
代码如下,我使用 gemfireXD 作为DB
.
我正在尝试在输入列表上并行执行过程。我作为参数传递给过程的列表的大小不是固定的,它是在执行以下代码中的查询后确定的。此列表的大小可能太大。
代码:
private static void executeProc (Connection cxn) throws SQLException {
Statement stmt = null;
try {
stmt = cxn.createStatement();
stmt.execute("select distinct field1 from Table1");
ResultSet rs = stmt.getResultSet();
List<String> fieldList = new ArrayList<String> ();
while (rs.next()) {
fieldList.add(rs.getString("field1"));
}
Array fieldArray = cxn.createArrayOf("VARCHAR", fieldList.toArray(new String[fieldList.size()]));
CallableStatement callableStmt = cxn.prepareCall("{CALL procedure1() ON TABLE Table1 WHERE field1 IN (?)}");
callableStmt.setArray(1, fieldArray);
callableStmt.execute();
} catch (SQLException e) {
e.printStackTrace();
}
}
错误: 在执行代码时,它给出了以下运行时错误。
未实现的功能:createArrayOf(String, Object[])
问题:
gemfireXD 文档说可以使用 setArray 方法传递一个列表来执行数据感知过程。但是当我处理实际的 API 时,setAaary() 方法需要一个数组对象而不是一个列表。
GemfireXD 文档在其支持 setArray() 方法的文档 (1.4.0) 中提供了此类过程调用的示例。文档中的直接示例如下: -
// GemFire XD 数据感知过程调用。
CallableStatement callableStmt = connection.prepareCall("{CALL order_credit_check() ON TABLE Orders WHERE customerID IN (?)}"); callableStmt.setArray(1, <-客户 ID 列表->);
如何调用preparedStatement.setArray 来设置查询中的参数?
任何人都可以建议任何其他实现方法来达到预期的结果吗?