码迷,mamicode.com
首页 > 编程语言 > 详细

Java Connection.setAutoCommit

时间:2016-09-09 23:45:53      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:

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

Java Connection.setAutoCommit

标签:

原文地址:http://www.cnblogs.com/z-sm/p/5858294.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!