java - 在 executeBatch() 之后使用 CallableStatement 检索 ResultSet

标签 java jdbc

我需要多次调用存储过程并为此使用 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(除非它们都针对具有相同列但查询不同的同一个表 [但是为什么不只是修改您的查询])。

关于java - 在 executeBatch() 之后使用 CallableStatement 检索 ResultSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21118698/

相关文章:

java - Guava 缓存与 ehcache 基准测试

java - 在另一个方法的构造函数中初始化最终变量

java - 将 Java 与 SQL Express 连接起来

java - 选择每个用户每天的首次登录时间

jdbc - Derby连接错误:错误XBM0H:无法创建目录/usr/opt/derby/db-derby-10.12.1.1-bin/bin/MyDbTest

java - 如何从命令行读取值并在引导注释配置类中使用它们来定义spring bean?

java - Java 在线多人游戏

java - 使用 Java 将 Windows 商店中的证书导出到 p12 文件

java - spring jdbc 和复合主键

java - CREATE TABLE 中的 AUTO_INCREMENT 抛出 JDBC.SQLSERVEREXCEPTION