-
JDBC batch提交只能返回int[]吗5
由于业务上的需求,我希望在batch提交后能够拿到自增的主键的集合。 虽然想法很天真,不过希望高手给点指点。
因为batch目前返回的int[] 不是我想要的。
在网上看到的执行前加锁,批量执行后再获取最新的主键,并解锁,然后自己计算中间的id, 这种方法感觉不是太好。2014年4月15日 14:28
2个答案 按时间排序 按投票排序
-
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
-
绝对不可能通过batch()来返回..但是可以找到一些替换的办法,LZ提到的加锁,自行计算主键的方式确实不可取..
1,在要操作的表上新增一个batchId字段,batchId随batch()统一插入,插入结束后,在通过batchId反查同一批次插入的主键.缺点:如果不能改表,那就白搭.
2,用procedure的方式,一边插入,一边记录主键.缺点:如果大量数据,性能会受影响.2014年4月15日 16:25
相关推荐
JDBC(Java Database Connectivity)是Java编程语言中用于与各种数据库进行交互的一种接口。在JDBC高级应用中,我们可以利用其提供的功能实现更高效、更灵活的数据操作。以下是一些关键知识点: 1. **元数据获取**...
本篇将围绕“jdbc示例代码”这一主题,深入探讨相关的知识点,包括batch处理、滚动游标、事务管理和DML操作,以及PreparedStatement的使用。 1. **Batch处理**: 在批量处理中,我们可以通过JDBC API一次性提交多...
同时,可以设置`Statement`的`batchSize`属性,指定在提交之前应累积多少条SQL语句。 此外,`PreparedStatement`通常比`Statement`更安全且性能更好,因为它允许预编译SQL语句,防止SQL注入攻击。如果数据来自不...
对于批量操作,JdbcTemplate提供了`batchUpdate(String[] sqls)`方法,可以一次执行多条SQL语句,提高效率。 8. **原创代码示例** 在压缩包中的"复件 SpringJDBC"文件可能包含一个简单的Spring整合JDBC的示例。...
在实际应用中,"batchinsert"可能是一个包含示例代码的文件,展示了如何使用JDBC批量插入Blob字段的具体实现。通过研究和理解这些代码,你可以更好地掌握批量插入Blob数据的技巧,并根据自己的需求进行调整和优化。 ...
这种方式简单直观,但当插入大量数据时,其效率低下,因为每次插入都需要与数据库进行一次网络通信和事务提交。例如,在提供的代码片段中,`test_mysql()` 方法演示了如何使用`PreparedStatement`对象逐条插入数据:...
4. Batch处理:一组SQL语句一起提交,提高效率。 5. 自动提交和事务管理:conn.setAutoCommit(false)开启手动事务,conn.commit()提交事务,conn.rollback()回滚事务。 四、最佳实践 - 使用PreparedStatement替代...
在`executeBatch()`执行期间,如果其中任何一条SQL语句失败,JDBC会返回一个整数数组,表示每条语句的执行结果。数组中的每个元素代表一个SQL语句,值可能为以下几种: - `Statement.SUCCESS_NO_INFO`:语句成功,...
**JDBC连接实现简单学生管理系统** 在Java编程中,JDBC(Java Database Connectivity)是用于与各种数据库进行交互的一种标准接口。本项目“JDBC连接实现简单学生管理系统”旨在通过JDBC技术,创建一个能够连接...
通过`conn.setAutoCommit(false)`开启手动提交,`conn.commit()`提交事务,`conn.rollback()`回滚事务。 ### 6. 批量操作 - **Batch Updates**:一次性执行多条SQL语句,提高性能。 ```java pstmt.addBatch(); ...
在Spring框架中,`JdbcTemplate`是用于简化Java数据库连接(JDBC)操作的一个核心组件。这个类提供了很多方法来执行SQL查询、更新语句,包括批处理操作。本篇文章将详细探讨`batchUpdate`方法及其在实际开发中的应用...
Spring JDBC提供了`batchUpdate()`方法支持批量SQL执行,提高性能。 七、命名参数 `NamedParameterJdbcTemplate`类允许使用命名参数而不是传统的问号占位符,使SQL更易读,例如: ```java Map, Object> params = ...
### 达内科技JDBC学习笔记 #### 一、JDBC概念 **Java Database Connection (JDBC)** 是Java中用于连接数据库的一种标准技术。通过JDBC,Java应用程序能够与多种类型的数据库进行交互,如MySQL、Oracle、SQL Server...
6. **Transactions**: JDBC支持事务处理,你可以通过Connection对象的`setAutoCommit(false)`关闭自动提交,然后手动调用`commit()`或`rollback()`来控制事务的提交和回滚。 下面是一个简单的JDBC代码示例,展示了...
可以通过`Connection`对象的`setAutoCommit(false)`方法关闭自动提交,然后在完成一组操作后调用`commit()`方法提交事务,或者在发生错误时调用`rollback()`方法回滚事务。 ### 5. JDBC优化技巧 - 使用...
在JDBC中,我们可以调用Connection对象的setAutoCommit(false)来关闭自动提交,然后在转账操作结束后,根据结果决定是否调用commit()或rollback()。 5. **错误处理与资源释放**:在完成数据库操作后,必须释放所有...
此外,JDBC支持事务管理,可以通过Connection对象的`setAutoCommit(false)`关闭自动提交,然后手动调用`commit()`或`rollback()`控制事务的提交和回滚。 **5. JDBC的处理** 在实际开发中,我们通常会使用...
6. **事务管理**:JDBC支持事务处理,可以通过`Connection`对象的`setAutoCommit(boolean autoCommit)`来开启或关闭自动提交。如果需要手动控制事务,可以调用`commit()`提交事务,或`rollback()`回滚事务。 7. **...