0 0

JDBC batch提交只能返回int[]吗5

由于业务上的需求,我希望在batch提交后能够拿到自增的主键的集合。 虽然想法很天真,不过希望高手给点指点。
因为batch目前返回的int[] 不是我想要的。
在网上看到的执行前加锁,批量执行后再获取最新的主键,并解锁,然后自己计算中间的id, 这种方法感觉不是太好。
2014年4月15日 14:28

2个答案 按时间排序 按投票排序

0 0

jdbc3我记得是可以的,部分代码如下

public List<Integer> addBatch(Connection connection, List<Outer> outers) {

		  PreparedStatement outerInsertStatement = connection.prepareStatement("...", Statement.RETURN_GENERATED_KEYS);

		  List<Integer> outerIds = new ArrayList<Integer>();

		  for(Outer outer : outers) {
		    outerInsertStatement.setParameter(...);
		    outerInsertStatement.setParameter(...);

		    outerInsertStatement.addBatch();
		  }

		  outerInsertStatement.executeBatch();
		  //需要jdbc3
		  ResultSet primaryKeys = outerInsertStatement.getGeneratedKeys();
		  while(!primaryKeys.isAfterLast()) {
		    outerIds.add(primaryKeys.getInt(0));
		  }
		  return outerIds
	}

2014年4月15日 20:56
0 0

绝对不可能通过batch()来返回..但是可以找到一些替换的办法,LZ提到的加锁,自行计算主键的方式确实不可取..

1,在要操作的表上新增一个batchId字段,batchId随batch()统一插入,插入结束后,在通过batchId反查同一批次插入的主键.缺点:如果不能改表,那就白搭.
2,用procedure的方式,一边插入,一边记录主键.缺点:如果大量数据,性能会受影响.

2014年4月15日 16:25

相关推荐

    JDBCJDBC高级应用

    JDBC(Java Database Connectivity)是Java编程语言中用于与各种数据库进行交互的一种接口。在JDBC高级应用中,我们可以利用其提供的功能实现更高效、更灵活的数据操作。以下是一些关键知识点: 1. **元数据获取**...

    jdbc示例代码

    本篇将围绕“jdbc示例代码”这一主题,深入探讨相关的知识点,包括batch处理、滚动游标、事务管理和DML操作,以及PreparedStatement的使用。 1. **Batch处理**: 在批量处理中,我们可以通过JDBC API一次性提交多...

    jdbc-批量插入数据

    同时,可以设置`Statement`的`batchSize`属性,指定在提交之前应累积多少条SQL语句。 此外,`PreparedStatement`通常比`Statement`更安全且性能更好,因为它允许预编译SQL语句,防止SQL注入攻击。如果数据来自不...

    spring 整合JDBC 原创代码

    对于批量操作,JdbcTemplate提供了`batchUpdate(String[] sqls)`方法,可以一次执行多条SQL语句,提高效率。 8. **原创代码示例** 在压缩包中的"复件 SpringJDBC"文件可能包含一个简单的Spring整合JDBC的示例。...

    jdbc批量插入大字段

    在实际应用中,"batchinsert"可能是一个包含示例代码的文件,展示了如何使用JDBC批量插入Blob字段的具体实现。通过研究和理解这些代码,你可以更好地掌握批量插入Blob数据的技巧,并根据自己的需求进行调整和优化。 ...

    jdbc批量 (绝对经典)

    这种方式简单直观,但当插入大量数据时,其效率低下,因为每次插入都需要与数据库进行一次网络通信和事务提交。例如,在提供的代码片段中,`test_mysql()` 方法演示了如何使用`PreparedStatement`对象逐条插入数据:...

    连接各种数据的---- jdbc典型代码

    4. Batch处理:一组SQL语句一起提交,提高效率。 5. 自动提交和事务管理:conn.setAutoCommit(false)开启手动事务,conn.commit()提交事务,conn.rollback()回滚事务。 四、最佳实践 - 使用PreparedStatement替代...

    JDBC高级批处理

    在`executeBatch()`执行期间,如果其中任何一条SQL语句失败,JDBC会返回一个整数数组,表示每条语句的执行结果。数组中的每个元素代表一个SQL语句,值可能为以下几种: - `Statement.SUCCESS_NO_INFO`:语句成功,...

    JDBC连接实现简单学生管理系统(附数据库).zip

    **JDBC连接实现简单学生管理系统** 在Java编程中,JDBC(Java Database Connectivity)是用于与各种数据库进行交互的一种标准接口。本项目“JDBC连接实现简单学生管理系统”旨在通过JDBC技术,创建一个能够连接...

    JDBC 学习笔记 JDBC 学习笔记

    通过`conn.setAutoCommit(false)`开启手动提交,`conn.commit()`提交事务,`conn.rollback()`回滚事务。 ### 6. 批量操作 - **Batch Updates**:一次性执行多条SQL语句,提高性能。 ```java pstmt.addBatch(); ...

    Spring JdbcTemplate.batchUpdate 例子

    在Spring框架中,`JdbcTemplate`是用于简化Java数据库连接(JDBC)操作的一个核心组件。这个类提供了很多方法来执行SQL查询、更新语句,包括批处理操作。本篇文章将详细探讨`batchUpdate`方法及其在实际开发中的应用...

    Spring JDBC 增删改查

    Spring JDBC提供了`batchUpdate()`方法支持批量SQL执行,提高性能。 七、命名参数 `NamedParameterJdbcTemplate`类允许使用命名参数而不是传统的问号占位符,使SQL更易读,例如: ```java Map, Object&gt; params = ...

    达内科技jdbc学习笔记

    ### 达内科技JDBC学习笔记 #### 一、JDBC概念 **Java Database Connection (JDBC)** 是Java中用于连接数据库的一种标准技术。通过JDBC,Java应用程序能够与多种类型的数据库进行交互,如MySQL、Oracle、SQL Server...

    java jdbc的开发

    6. **Transactions**: JDBC支持事务处理,你可以通过Connection对象的`setAutoCommit(false)`关闭自动提交,然后手动调用`commit()`或`rollback()`来控制事务的提交和回滚。 下面是一个简单的JDBC代码示例,展示了...

    jdbc增删改查

    可以通过`Connection`对象的`setAutoCommit(false)`方法关闭自动提交,然后在完成一组操作后调用`commit()`方法提交事务,或者在发生错误时调用`rollback()`方法回滚事务。 ### 5. JDBC优化技巧 - 使用...

    jdbc.rar_数据库操作

    在JDBC中,我们可以调用Connection对象的setAutoCommit(false)来关闭自动提交,然后在转账操作结束后,根据结果决定是否调用commit()或rollback()。 5. **错误处理与资源释放**:在完成数据库操作后,必须释放所有...

    JDBC 入门教程内含源码以及说明书可以自己运行复现.zip

    此外,JDBC支持事务管理,可以通过Connection对象的`setAutoCommit(false)`关闭自动提交,然后手动调用`commit()`或`rollback()`控制事务的提交和回滚。 **5. JDBC的处理** 在实际开发中,我们通常会使用...

    数据库jdbc

    6. **事务管理**:JDBC支持事务处理,可以通过`Connection`对象的`setAutoCommit(boolean autoCommit)`来开启或关闭自动提交。如果需要手动控制事务,可以调用`commit()`提交事务,或`rollback()`回滚事务。 7. **...

Global site tag (gtag.js) - Google Analytics