0 0

【jdbcTemplate】批量插入异常捕获10

在使用jdbctemplate的批量操作的时候

调用jdbcTemplate.batchUpdate,他的原理机制是,集合一定数量的sql,一起发送到数据库,这样减少与数据库频繁交互的成本
但现在有一个问题就是,我这有50条sql,批量插入,然后有一条有问题,我如何让这一条执行失败时,不影响其余49条语句的执行呢?

下面是我自己封装的一个方法
批量插入这个list到数据库去,如果出现什么值太大,违反唯一性约束什么之类的异常,我的那个catch根本就捕获不住,我最多只能知道这个list插入有问题,没法实现list中一条记录有问题,不影响其他记录的执行

public  void insert(final List<?> lists) {
	// 获取insert语句  eg:sql = insert into user (id,name,age) values (?,?,?)
	String sql = SqlUtils.getInsertSql(lists.get(0));
	jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
		@Override
		public void setValues(PreparedStatement ps, int i) {
			Object value = lists.get(i);
			// objects = 获取代替?的具体值
			Object[] objects = SqlUtils.getValues(value);
			for (int k = 0; k < objects.length; k++) {
				try {
					ps.setObject(k + 1, objects[k]);
				} catch (SQLException e) {	
					log.error("数据库异常 -- "+value.getClass().getSimpleName(),e);
				}
			}
		}

		@Override
		public int getBatchSize() {
			return lists.size();
		}
	});
}
2014年5月30日 10:01

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

0 0

采纳的答案

如果想批量,就要一起commit,一起回滚事物,
否则如果你想记录记录哪条数据有问题,
那就不要批量,一条一条提交,
碰到有问题的trycatch去捕获他,
定义一个字符串记录一下,然后再继续提交,
如果再次碰到有问题的,然后在追加字符串,
最终返回字符串,
如果是空的,代表全部成功,
否则就查询字符串里面记录的信息,就知道哪条失败了

2014年5月30日 11:09
0 0

批量么,肯定是要么全commit,要么全rollback。
你既然用了batchUpdate,batchInsert,那你肯定得确保你的批量sql都没有问题。
神马主键约束啊,你设计的数据库不会考虑到这些问题么,如果不用主键自增长,那你页面表单就得ajax判断数据库是不是已经存在了!
长度神马的都是客户端上该处理的问题,你这些验证控制自己不做好,数据库再牛板也帮不了你啊

2014年5月30日 10:12
0 0

做不到,JDBC batch 操作是批量提交的

2014年5月30日 10:07

相关推荐

    jdbctemplatedemo.zip

    对于数据导入,项目可能会包含读取文件(例如CSV或XML)中的数据,然后使用JdbcTemplate批量插入到MySQL数据库。这通常涉及解析文件,创建数据行的列表,然后使用`batchUpdate`方法将这些行作为批处理语句执行。...

    JdbcTemplate.jar

    3. **异常处理**:正确捕获和处理DataAccessException,确保程序的健壮性。 4. **资源管理**:遵循Java的"开闭原则",及时关闭数据库连接,防止资源泄露。 总结,Spring的JdbcTemplate提供了强大的数据库操作支持,...

    spring框架 jdbcTemplate

    JdbcTemplate将数据库抛出的异常转换为Spring的DataAccessException层次结构,这样我们可以在更高层次的代码中捕获并处理这些异常,而不必关心具体的数据库实现。 10. **最佳实践**: - 使用PreparedStatement...

    Spring框架中jdbcTemplate 的使用.doc

    JdbcTemplate会将数据库相关的异常转换为Spring的`DataAccessException`,这是一个检查型异常,便于在应用程序中捕获和处理。 7. **类型转换和结果映射**: 在查询中,JdbcTemplate可以根据提供的Class类型自动将...

    Spring JdbcTemplate.batchUpdate 例子

    3. **异常处理**:当批处理中的某条语句失败时,需要捕获并处理`BatchUpdateException`,了解失败的原因,并决定是继续处理其他语句还是全部回滚。 4. **预编译语句**:使用`PreparedStatement`而非`Statement`,...

    JdbcTemplate.rar

    - **异常处理**:自动捕获并转换JDBC异常,提供更友好的异常类型。 - **事务管理**:支持编程式和声明式事务管理,简化事务控制。 - **避免资源泄露**:自动关闭数据库连接、Statement和ResultSet,防止资源泄露。 -...

    读取txt-jdbc导入百万级数据.rar

    使用Spring JdbcTemplate可以捕获并处理SQL相关的异常,同时,确保在发生错误时能够正确回滚事务,保持数据一致性。 9. **测试和监控**:在实际应用中,需要编写单元测试和集成测试来验证导入过程的正确性,并使用...

    springj-dbc文档

    此外,通过设置JdbcTemplate的batchUpdate方法,还可以实现批量插入和更新,进一步提升数据库操作的性能。 总结,Spring JDBC提供了丰富的API和工具类,使得数据库操作变得简单且易于管理。通过合理使用...

    SSM框架利用poi导入导出Excel文件 demo

    这些对象可以被收集到一个List中,之后通过MyBatis或Spring的JdbcTemplate批量插入到数据库中。为了确保数据的正确性,可以添加数据验证步骤,例如检查必填项、数据类型等。 2. **导出Excel** 导出Excel时,你需要...

    spring jdbc 使用

    4. 优化性能:根据业务需求选择合适的查询方法,如使用batchUpdate()进行批量插入。 总之,Spring JDBC通过提供一系列实用工具类和接口,极大地简化了JDBC编程,提高了代码的可读性和可维护性。通过熟练掌握Spring ...

    Spring框架实现Excel批量导入数据

    为了提供良好的用户体验,需要捕获并处理可能出现的异常,如文件不存在、格式错误、数据库操作失败等。同时,应向用户返回相应的提示信息,告知导入结果。 7. **实现Controller接口**: 创建一个Controller类,...

    spring整合mysql的一些基本操作

    例如批量插入: ```java String sql = "INSERT INTO table_name (column1, column2) VALUES (?, ?)"; List[]&gt; batchParams = new ArrayList(); // 填充batchParams int[] updateCounts = jdbcTemplate.batch...

    Spring框架的Excel导入导出

    - 使用JdbcTemplate或MyBatis等持久层框架将Java对象批量插入到数据库中。 3. **数据库数据导出到Excel** 导出数据库数据到Excel文件,可以创建一个Controller方法,接收用户请求,然后查询数据库。查询结果转换...

    spring的增删改查

    Spring提供了统一的异常处理机制,将数据库异常转换为Spring的`DataAccessException`子类,简化了异常的捕获和处理。 10. **Spring Boot集成** 如果你使用Spring Boot,它可以自动配置数据源和JDBC模板,进一步...

    SSH中通用dao类

    此外,批处理操作(如批量插入、更新)也是提升效率的一种手段。 7. **测试支持**:通用DAO设计时应考虑测试友好性,提供模拟数据的接口或方法,方便单元测试。可以使用JUnit和Mockito等工具进行测试,确保DAO的...

    ifxjdbc.jar包

    8. **异常处理**:`SQLException` 是所有JDBC相关的错误的基类,捕获这个异常可以处理数据库操作中的错误。 9. **性能优化**:`ifxjdbc.jar` 提供了一些性能调优选项,如设置连接池、预读取缓冲区大小等。 在实际...

Global site tag (gtag.js) - Google Analytics