- 论坛徽章:
- 0
|
在使用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();
- }
- });
- }
复制代码
http://bbs.ibeifeng.com/read-htm-tid-66060.html |
|