我需要多次调用存储过程,并为此使用executeBatch()
。每个调用都应返回带有结果的表,但我无法访问此结果。下一个代码工作正常:
callableStatement.setString(1, "foo");
callableStatement.setString(2, "bar");
callableStatement.execute();
resultSet = callableStatement.getResultSet();
但是下一个代码不能按预期工作:
for (String str : strings) {
callableStatement.setString(1, str);
callableStatement.setString(2, "bar");
callableStatement.addBatch();
}
callableStatement.executeBatch();
resultSet = callableStatement.getResultSet(); // returns null
我已经尝试在提取ResultSet之前调用
callableStatement.getUpdateCount()
和callableStatement.getMoreResults()
,但未成功。 最佳答案
这不是#executeBatch
的正确用法。批处理方法用于进行数据操作,而不是获取结果数据。也就是说,您可以批量插入/更新/删除,但不能读取。 #executeBatch
的结果是更新计数,指示每个批处理操作进行了多少更改
目的是可以通过减轻网络开销和数据库往返操作来提高性能,以进行类似的数据操作操作。
通常,您不批量执行查询,因为不同的查询会导致形成不同形状的ResultSet
(除非它们全部用于具有相同列但具有不同查询的同一张表[但是为什么不只修改您的查询])。