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 抛出异常停止

时间: 2024-10-31 23:23:05

JDBC executeBatch 抛出异常停止的相关文章

JDBC batch批处理Statement executeBatch 具体解释

JDBC提供了数据库batch处理的能力,在数据大批量操作(新增.删除等)的情况下能够大幅度提升系统的性能.我曾经接触的一个项目,在没有採用batch处理时,删除5万条数据大概要半个小时左右,后来对系统进行改造,採用了batch处理的方式,删除5万条数据基本上不会超过1分钟.看一段JDBC代码: // 关闭自己主动运行 con.setAutoCommit(false); Statement stmt = con.createStatement(); stmt.addBatch("INSERT I

JDBC batch批量Statement executeBatch 详细解释

JDBC提供了数据库batch处理的能力,在数据大批量操作(新增.删除等)的情况下能够大幅度提升系统的性能.我曾经接触的一个项目,在没有採用batch处理时,删除5万条数据大概要半个小时左右,后来对系统进行改造,採用了batch处理的方式,删除5万条数据基本上不会超过1分钟.看一段JDBC代码: // 关闭自己主动运行 con.setAutoCommit(false); Statement stmt = con.createStatement(); stmt.addBatch("INSERT I

Android 图片加载框架Universal-Image-Loader源码解析

Universal-Image-Loader(项目地址)可以说是安卓知名图片开源框架中最古老.使用率最高的一个了.一张图片的加载对于安卓应用的开发也许是件简单的事,但是如果要同时加载大量的图片,并且图片用于ListView.GridView.ViewPager等控件,如何防止出现OOM.如何防止图片错位(因为列表的View复用功能).如何更快地加载.如何让客户端程序员用最简单的操作完成本来十分复杂的图片加载工作,成了全世界安卓应用开发程序员心头的一大难题,所幸有了Universal-Image-

Visual Studio 2017

软件标签: Visual Studio是由微软推出的代码编程工具,Visual Studio 2017 有着更多的趣味性,支持 C#.C++.Python.Visual Basic.Node.js.HTML.JavaScript 等绝大多数的主流代码语言,当然VS 2017在重构.代码修复和调试的增强为你带来更多的便利.无论是个人还是企业都能很好的驾驭它,新云带来Visual Studio 2017 正式版下载,需要的不要错过. visual studio 2017功能特点 1.开发 快速导航.

使用Druid作为数据源

Druid号称是Java语言中最好的数据库连接池. 1) 可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助. 2) 替换DBCP和C3P0.Druid提供了一个高效.功能强大.可扩展性好的数据库连接池. 3) 数据库密码加密.直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题.DruidDruiver和DruidDataSource都支持PasswordCallback. 4) SQ

Java线程中断的本质深入理解(转)

一.Java中断的现象 首先,看看Thread类里的几个方法: public static boolean interrupted 测试当前线程是否已经中断.线程的中断状态 由该方法清除.换句话说,如果连续两次调用该方法,则第二次调用将返回 false(在第一次调用已清除了其中断状态之后,且第二次调用检验完中断状态前,当前线程再次中断的情况除外). public boolean isInterrupted() 测试线程是否已经中断.线程的中断状态 不受该方法的影响. public void in

终于等到你,最强 IDE Visual Studio 2017 正式版发布

Visual Studio 2017 正式版发布,该版本不仅添加了实时单元测试.实时架构依赖关系验证等新特性,还对许多实用功能进行了改进,如代码导航.IntelliSense.重构.代码修复和调试等等.无论使用哪种语言或平台,都能节省开发者在日常任务上花费的时间和精力. 此外,该版本还带来了一个新的轻量化和模块化的安装体验,可根据需要量身定制安装.多个增强功能汇集在一起,使 Visual Studio 2017 的启动速度比 Visual Studio 2015 快3倍,解决方案加载时间缩短 2

Druid 介绍及配置

1. Druid是什么? Druid是Java语言中最好的数据库连接池.Druid能够提供强大的监控和扩展功能. 2. 在哪里下载druid 正式版本下载:maven中央仓库: http://central.maven.org/maven2/com/alibaba/druid/ 3. 怎么获取Druid的源码 Druid是一个开源项目,源码托管在github上,源代码仓库地址是 https://github.com/alibaba/druid.同时每次Druid发布正式版本和快照的时候,都会把源

JAVA中断机制详解

java的中断是一种协作机制.也就是说调用线程对象的interrupt方法并不一定就中断了正在运行的线程,它只是要求线程自己在合适的时机中断自己. 一.Java中断的现象 首先,看看Thread类里的几个方法: public static boolean interrupted() 测试当前线程是否已经中断.线程的中断状态由该方法清除.换句话说,如果连续两次调用该方法,则第二次调用将返回 false(在第一次调用已清除了其中断状态之后,且第二次调用检验完中断状态前,当前线程再次中断的情况除外).