JDBC PrepareStatement 批量插入并返回主键在SQLServer环境出异常
java.sql.BatchUpdateException: A statement attempted to return a result set in executeBatch().
关键代码如下:
connection.setAutoCommit(false); connection.getTransactionIsolation(); connection.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); String sql = "insert into TempPermission(ResourceKey, UserId, ResourceType, Operation) VALUES (?,?,?,?)"; statement = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); // 设置返回主键,如不加则不报错,但主键怎么拿不到! for (Permission permission : permissionList) { statement.setObject(1, permission.getResourceKey()); statement.setObject(2, permission.getUserId()); statement.setObject(3, permission.getResourceType()); statement.setObject(4, permission.getOperation()); statement.addBatch(); } int[] updateCount = statement.executeBatch(); // 如改为executeUpdate()呢则没有batch效果,仅看到插入了一条记录。 generatedKeys = statement.getGeneratedKeys(); int i = 0; while (generatedKeys.next()) { permissionList.get(i).setId(generatedKeys.getInt(1)); i++; } connection.commit();
请教下怎么解决这个问题。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
这么不科学啊,真是醉了。 JDBC写得比较少,头次遇到这个问题。
请教下呢,如果不用批量则问题解决了。 但之所以用批量插入,我的出发点是提高性能呢。
回复
设定就是那样的,莫法
批量插入不支持返回主键的