博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java Connection.setAutoCommit
阅读量:6758 次
发布时间:2019-06-26

本文共 1269 字,大约阅读时间需要 4 分钟。

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://pnweo.baihongyu.com/

你可能感兴趣的文章
第十三周项目2-成绩处理
查看>>
dede调用img图片
查看>>
Session中放错误提示JSP上获取
查看>>
Folding Views
查看>>
cookie注入&中转注入笔记
查看>>
生产环境linux服务器系统安全配置
查看>>
我的友情链接
查看>>
MySql中 delimiter 详解
查看>>
浏览器history操作实现一些功能
查看>>
你那么喜欢看”干货“,是因为你根本不想下功夫。
查看>>
软件测试用例
查看>>
python mysql 单表查询 多表查询
查看>>
android handler概念解释
查看>>
eclipse代码左虚线对齐设置
查看>>
C中的sizeof
查看>>
插入排序的Java代码实现
查看>>
Spring整合Web开发
查看>>
在SContruct中编译.c
查看>>
让ubuntu开启ssh服务以及让vi/vim正常使用方向键与退格键
查看>>
简易时间序列分析的方法总结(R实现)
查看>>