JDBC executeBatch 抛出异常停止
进行批量更新的时候发现:
addBatch(sql);
executeBatch 抛出异常后,剩余的sql没有更新,即出现异常之前的都入库了,异常之后即使有可执行sql都不会执行。
百度资料后了解:这是DBMS数据库管理系统控制的,有的DBMS在异常之后,剩下的sql也会执行,有的DBMS异常之后其余的不入库。
我的改进方法如下:public static boolean bachInsertData(List<String> sqlList) { boolean bool = false; Connection conn = null;
public static boolean bachInsertData(List<String> sqlList) {
boolean bool = false;
Connection conn = null;
Statement stm = null;
try {
conn = MyDAO.getConnection();
conn.setAutoCommit(false);
stm = conn.createStatement();
for (String sql : sqlList) {
stm.addBatch(sql);
}
stm.executeBatch();
conn.commit();
bool = true;
} catch (Exception e) {
if(e instanceof BatchUpdateException){
BatchUpdateException bException = (BatchUpdateException)e;
int[] s = bException.getUpdateCounts();
logger.info("更新失败数据:"+sqlList.get(s.length));
if(s.length+1<sqlList.size()){
List<String> sList = sqlList.subList(s.length+1, sqlList.size());
bachInsertData(sList);
}
}else{
e.printStackTrace();
try {
if (stm != null)
stm.close();
} catch (SQLException ex) {
ex.printStackTrace();
}
try {
conn.close();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
} finally {
try {
if (stm != null)
stm.close();
} catch (SQLException ex) {
ex.printStackTrace();
}
try {
conn.close();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
return bool;
}
以前不知道哇啊啊啊啊,好多得改!!!
JDBC executeBatch 抛出异常停止的更多相关文章
- JDBC batch批处理Statement executeBatch 具体解释
JDBC提供了数据库batch处理的能力,在数据大批量操作(新增.删除等)的情况下能够大幅度提升系统的性能.我曾经接触的一个项目,在没有採用batch处理时,删除5万条数据大概要半个小时左右,后来对系 ...
- JDBC batch批量Statement executeBatch 详细解释
JDBC提供了数据库batch处理的能力,在数据大批量操作(新增.删除等)的情况下能够大幅度提升系统的性能.我曾经接触的一个项目,在没有採用batch处理时,删除5万条数据大概要半个小时左右,后来对系 ...
- Druid 介绍及配置
1. Druid是什么? Druid是Java语言中最好的数据库连接池.Druid能够提供强大的监控和扩展功能. 2. 在哪里下载druid 正式版本下载:maven中央仓库: http://cent ...
- 【GoLang】GoLang 的流程与函数
003.GO流程与函数 1 概述 1.1 Go中流程控制分三大类:条件判断,循环控制和无条件跳转 2 流程 2.1 if 2.1.1 if条件判断语句中不需要括号 2.1.2 条件判断语句里面允许声明 ...
- Python生成器 yield
迭代器与list相比较,就for in句型循环拿数据而言: 用list写很简洁,但如果list数据过大,会很消耗资源. 用iteration 迭代器写,则不会消耗那么多资源.他会随用随取,用一个拿一个 ...
- 使用Druid作为数据源
Druid号称是Java语言中最好的数据库连接池. 1) 可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能 ...
- Java线程中断的本质深入理解(转)
一.Java中断的现象 首先,看看Thread类里的几个方法: public static boolean interrupted 测试当前线程是否已经中断.线程的中断状态 由该方法清除.换句话说,如 ...
- 最强 IDE Visual Studio 2017 正式版发布
Visual Studio 2017 正式版发布,该版本不仅添加了实时单元测试.实时架构依赖关系验证等新特性,还对许多实用功能进行了改进,如代码导航.IntelliSense.重构.代码修复和调试等等 ...
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(十)数据层优化-整合druid
druid介绍 这是druid对自己的介绍: Druid是阿里开源的一个数据库连接池技术,号称自己是目前最好的数据库连接池,在功能.性能.扩展性方面,都超过其他数据库连接池,包括DBCP.C3P0.B ...
随机推荐
- Android Studio开发环境的配置
为了使开发人员与时俱进, 在这里给大家讲解一下Android Studio的安装步骤及设置. 使用的是Android的最新版本,0.4.2版本,Android Studio可以脱离Eclipse单独运 ...
- Entity Framework 学习初级篇4--Entity SQL
Entity SQL 是 ADO.NET 实体框架 提供的 SQL 类语言,用于支持 实体数据模型 (EDM).Entity SQL 可用于对象查询和使用 EntityClient 提供程序执行的查询 ...
- Nginx将通过IP访问重定向
server { listen 80 default_server; server_name localhost; location / { rewrite ^ http://www.xxx.com/ ...
- JS清除dropdownlist绑定的项,并添加新项
<script type="text/javascript"> /*删除项*/ document.getElementById('KeyList').options.l ...
- DOM4j 操作XML
<?xml version="1.0" encoding="GBK"?> <persons> <men> <perso ...
- 用SqlBulkCopy批量插入数据 遇到的错误
在将txt文本格式的数据导入到数据库中时候,使用的是SqlBulkCopy.但是出现了多处错误,在网上查到得资料如下: 错误一:来自数据源的 String 类型的给定值不能转换为指定目标列的类型 nv ...
- 文件夹添加 IIS 应用程序池用户权限
http://serverfault.com/questions/81165/how-to-assign-permissions-to-applicationpoolidentity-account ...
- Blocks(闭包)
转自:http://my.oschina.net/joanfen/blog/317644?fromerr=ATWzC3Y2 Block 与传统代码相比较更加轻量,调用简洁方便,而且可以返回多个参数,使 ...
- kali系统安装
kali live 安装到U盘 http://www.backtrack.org.cn/thread-17197-1-1.html 用Live U盘安装Kali Linux http://cn.doc ...
- c#如何序列化与反序列化json文件
见网站: http://www.json.org/ 代码如下: /* * Copyright (c) 2013 Calvin Rien * * Based on the JSON parser by ...