Connection.setAutoCommit()的使用思考
来源:互联网 发布:淘宝网风骑士俱乐部 编辑:程序博客网 时间:2024/06/16 11:27
Connection.setAutoCommit()总的来说是为了保护数据库的一致性的,一般用在事务处理中。首先聊聊事务处理的必要性:
例子:
在银行中A向B转账5000元
那么就有两个操作:
①:A的账户减少5000元
②:B的账户增加5000元
假如在执行②操作时,系统出现故障,如果不采用事件处理,就会发生A账户减少5000元,而B账户并没有增加的问题,也就是产生脏数据,那么就必须采取事件处理。
下面的程序用来演示,逐步说明事务处理的原理以及Connection.setAutoCommit()的用法:
程序一:未采用事务处理
public class Test{public static void main(String[] args) { Connection con=getConnection(); try { //执行更新操作,A账户减少5000元 update1(con); //执行更新操作,A账户增加5000元 update2(con); } catch (Exception e) { e.printStackTrace(); } finally { if(con!=null){ try{ con.close(); }catch(Exception e){ } } }}
如果在执行update2()时系统故障,那么update1()就会写入数据库,但是更新2没有执行,这就会产生错误。再看下一个程序:
程序二:采用事务处理
public class Test{public static void main(String[] args) { Connection con=getConnection(); try { //设置为手动提交 con.setAutoCommit(false); update1(con); update2(con); //手动提交 con.commit(); } catch (Exception e) { try { //如果出错回滚所有数据 con.rollback(); } catch (Exception e2) { } } finally { if(con!=null){ try{ con.close(); }catch(Exception e){ } } }}
可以看到我们将Connection.setAutoCommit(false)加入到代码中,意思就是由用户统一提交更改,而不是跟以前一样,每执行一个操作就写入数据库中。
假如在执行更新操作时,出现错误,那么程序就不会走到con.commit()中去,数据就不会提交,然后会通过con.rollback()将事务回滚,将数据恢复到之前的样子。
这样就保证了数据的一致性。
注意事项:
如果将Connection.setAutoCommit()设置为false,那么一定要有con.commit(),因为如果程序正确执行,但是却没有提交也没有回滚,那么相应的表就会被锁起来,而con没有机会释放连接。所以这点是我们要注意的。
阅读全文
1 0
- Connection.setAutoCommit()的使用思考
- Connection.setAutoCommit使用的注意事项
- Connection.setAutoCommit使用的注意事项
- Connection.setAutoCommit使用的注意事项
- Connection.setAutoCommit使用的注意事项
- Connection.setAutoCommit使用的注意事项
- Connection.setAutoCommit使用的注意事项
- Connection.setAutoCommit使用的注意事项
- Connection.setAutoCommit使用的注意事项
- Connection.setAutoCommit使用的注意事项
- Connection.setAutoCommit使用的注意事项
- Connection.setAutoCommit使用的注意事项
- Connection的setAutoCommit()方法
- connection.setAutoCommit注意事项
- 关于connection.setAutoCommit(false)对查询的影响
- 误用Connection.setAutoCommit导致的数据库死锁问题
- java-JDBC-about AutoCommit[关于Connection的setAutoCommit方法]
- 【数据库】使用Collection.setAutoCommit(false)的注意事项
- WSAStartup( )详解
- MVC简单的工作原理
- 将二维数组排列组合
- GIT 常用命令总结
- yppasswd unknown user (uid=0).
- Connection.setAutoCommit()的使用思考
- 2017年7月,我要学习Unity 3D
- Python 3从入门到精通1-环境安装和运行环境
- mybatis中#和$的区别
- mysql中为用户设置数据库,数据表,字段(列)的访问权限
- MyEclipse启动Tomcat或重启Tomcat时报could not create the java virtual machine解决方法
- composer安装
- linux通配符、元字符、转义字符
- 网络通信模式&基站及其基本应用