zoukankan      html  css  js  c++  java
  • Java Connection.setAutoCommit

    Java setAutoCommit 默认为true,即每条SQL语句在各自的一个事务中执行。

    很多时候需要有多个操作在一个事务执行,如循环插入,此时可在插入开始前设置 conn.setAutoCommit(false) ,插入结束后才conn.commit(),并在catch中执行conn.rollback()。这样即使插入中间报错,前面执行没报错的也会回滚,从而保证数据的完整性。正确写法示例如下:

     1         Connection con = null;
     2         try {
     3             con = getConnection();
     4             con.setAutoCommit(false);
     5             /*
     6              * do what you want here.
     7              */
     8             con.commit();
     9         } catch (Throwable e) {
    10             if (con != null) {
    11                 try {
    12                     con.rollback();// 设定setAutoCommit(false)若没有在catch中进行Connection的rollBack操作,操作的表就会被锁住,造成数据库死锁。虽然在执行con.close()的时候会释放锁,但若应用服务器使用了数据库连接池,连接不会被断开,从而不会放锁
    13                 } catch (SQLException e1) {
    14                     e1.printStackTrace();
    15                 }
    16             }
    17 
    18             throw new RuntimeException(e);
    19         } finally {
    20             if (con != null) {
    21                 try {
    22                     con.close();
    23                 } catch (SQLException e) {
    24                     e.printStackTrace();
    25                 }
    26             }
    27         }
    View Code

    需要注意的是:设定setAutoCommit(false)若没有在catch中进行Connection的rollBack操作,操作的表就会被锁住,造成数据库死锁。虽然在执行con.close()的时候会释放锁,但若应用服务器使用了数据库连接池,连接不会被断开,从而不会放锁

    参考资料:http://ygsilence.iteye.com/blog/1297762

  • 相关阅读:
    Visual Studio 2008 完全卸载
    设置 Visual Studio 文件版权信息
    安装 Visual Studio 插件 Visual Assist
    下载 / 安装 Visual Studio
    Python help 函数
    Python next 函数
    Python oct 函数
    Python min 函数
    Python reload 函数
    numpy中matrix的特殊属性
  • 原文地址:https://www.cnblogs.com/z-sm/p/5858294.html
Copyright © 2011-2022 走看看