心得9--JDBC回顾-事务案例分析
来源:互联网 发布:js 获取播放时间 编辑:程序博客网 时间:2024/04/30 00:09
1. 基础知识回顾:
事务的概念:事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功
数据库开启事务命令:start transaction 开启事务
Rollback 回滚事务;Commit 提交事务
2.创建JDBC的事务主要分以下步骤
1).设置事务的提交方式为非自动提交:
conn.setAutoCommit(false);
2).将需要添加事务的代码放入try,catch块中。
3).在try块内添加事务的提交操作,表示操作无异常,提交事务。
conn.commit();
4).在catch块内添加回滚事务,表示操作出现异常,撤销事务:
conn.rollback();
5).设置事务提交方式为自动提交:
conn.setAutoCommit(true);
3. 事务的特性(ACID)(这个很重要所以在此重复提一下)
l 原子性(Atomicity):原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
l 一致性(Consistency):事务必须使数据库从一个一致性状态变换到另外一个一致性状态。
l 隔离性(Isolation):事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
l 持久性(Durability):持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。
4.如果不考虑隔离性,可能会引发如下问题:
l 脏读:指一个事务读取了另外一个事务未提交的数据。
l 不可重复读:在一个事务内读取表中的某一行数据,多次读取结果不同
l 虚读(幻读):是指在一个事务内读取到了别的事务插入的数据,导致前后读取不一致。
5.数据库共定义了四种隔离级别:
Serializable:可避免脏读、不可重复读、虚读情况的发生。(串行化、序列化;最高级别,性能最差,一人操作任何人不能操作也不能差)
Repeatable read:可避免脏读、不可重复读情况的发生(可重复读)
Read committed:可避免脏读情况发生(读已提交)。
Read uncommitted:最低级别,以上情况均无法保证。(读未提交)
l set transaction isolationlevel: 设置事务隔离级别
l select @@tx_isolation :查询当前事务隔离级别
一般没有特殊要求的情况下都使用默认的隔离级别
6. 案例分析
packagecom.code;
importjava.sql.Connection;
importjava.sql.SQLException;
importcom.Db.DbManager;
publicclass Demo5 {
publicvoid test(){
Connection con = DbManager.getConnection();
String sql1 = "insert into users(name,password)values('abc','abc')";
String sql2 = "delete from users where id=7";
try {
con.setAutoCommit(false); //不让程序自动提交
con.prepareStatement(sql1).executeUpdate();
con.prepareStatement(sql2).executeUpdate();
System.out.println("插入成功!");
con.commit();
} catch (SQLException e) {
try {
con.rollback(); //出错时回滚回去
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
}finally{
try {
con.setAutoCommit(true); //设置为系统的默认提交方式
} catch (SQLException e) {
e.printStackTrace();
}
DbManager.closeDB(con, null,null);
}
}
publicstaticvoid main(String[] args) {
Demo5 d = new Demo5();
d.test();
}
}
- 心得9--JDBC回顾-事务案例分析
- 心得7--JDBC回顾-批处理案例解说
- 心得6--JDBC回顾-如何处理大文本和图像声音案例分析
- 心得8--JDBC回顾-存储过程与设置主键分析
- 从零开始学JDBC--1.11 事务机制以及案例分析
- Spring JDBC-实施Spring AOP事务注意事项及案例分析
- Java技术回顾之JDBC:JDBC的事务支持
- Java技术回顾之JDBC:JDBC的事务支持
- jdbc心得-3-事务、批处理、设置主键
- spring心得9--自动代理知识点讲解及案例分析
- 事务回顾
- 心得1--Cookie简介及案例分析
- 心得2--Session简介及案例分析
- 心得11--jsp自定义标签案例分析
- JDBC回顾
- JDBC回顾
- JDBC回顾
- JDBC回顾
- 【翻译】NSObject
- 心得8--JDBC回顾-存储过程与设置主键分析
- hdu 4278 码表数字跳跃找规律
- 单点登陆--同一个帐户只能在一台电脑(同一IP)上登陆
- android多线程断点续传
- 心得9--JDBC回顾-事务案例分析
- 创建文件
- fedora 17 免密码ssh登录
- perl的hash of hash 最便于一对多对应的处理
- ubuntu上的shell 杂记
- MyEclipse中hibernate反向工程实例(一对多关联)
- JXPATH指南
- Android、苹果logo背后的故事
- 详解Linux配置iSCSI方法