JDBC的事务控制
2011-09-15 14:14
260 查看
JDBC的事务控制
Select @@tx_isolation查看系统的执行方式
set@@autocommit=1;时是自动提交。
当系统执行 set@@autocommit=0;时才是非自动提交
Start transaction;此时开始修改数据库表格;正确执行用commit提交。
Commit提交语句。Commit后面的语句将是下一事务:一个独立的工作单元(有一条或多条sql语句做成的)
只有当所有的事务全部执行成功才能完成,否则全部失败。
ACID四个属性
A.原子性
每个事务都是一个整体不可分割,只有全部完成才能成功否则全部失败(不会处于执行中间的状态);
C.一致性
保证相应的事务处于正确的状态。
I. 隔离性
通过加锁的方法来实现隔离级别(在执行期间与外部隔绝不会被外部看到执行只有执行完成后才可以被看到)。
D.持久性
当事务执行正确时,会永久的保留的。
set@@artocommit=1;时是自动提交
个事务
Rollback回滚事务(回到修改之前的状态);
设置保存点savepoint s1;
回滚到保存点:rollback work to savepoint s1;
事务没有提交,只有当commit执行时才提交,提交后保存点之前的修改才可永久保留
在JDBC中用conn.setAutoCommit(0);修改系统非自动提交。
conn.commit();事务提交
conn.rollback();事务回滚
SavePoint sp=con.setSavePoint();设置保存点
Con.rollback(sp);返回保存点
Con.setTransactionIsolation();设计隔离级别
事物的隔离级别
脏读:读到的线程未提交的数据;(在修改未提交时就让另一个事务读取就是脏读)
不可重复读:在一个事物中读取同一个记录两次,获取数据不同
幻读:在一个事务中,读取到的记录数不同
实例:
public class TestTransaction {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Connection con=null;
PreparedStatement pst=null;
Savepoint sp=null;
try {
con=JdbcUtil.getConnection();
con.setAutoCommit(false);
con.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);
String str="delete from student where id=3";
pst=con.prepareStatement(str);
System.out.println("第一条sql语句。。");
pst.executeUpdate();
sp=con.setSavepoint();
System.out.println("第二条sql语句...");
str="insert into student(id,name) values(2,'ttt')";
pst=con.prepareStatement(str);
pst.executeUpdate();
con.commit();
System.out.println("事务完成...");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
try {
con.rollback(sp);
con.commit();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}finally{
try {
con.setAutoCommit(true);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
JdbcUtil.release(null,pst, con);
}
}
}
Select @@tx_isolation查看系统的执行方式
set@@autocommit=1;时是自动提交。
当系统执行 set@@autocommit=0;时才是非自动提交
Start transaction;此时开始修改数据库表格;正确执行用commit提交。
Commit提交语句。Commit后面的语句将是下一事务:一个独立的工作单元(有一条或多条sql语句做成的)
只有当所有的事务全部执行成功才能完成,否则全部失败。
ACID四个属性
A.原子性
每个事务都是一个整体不可分割,只有全部完成才能成功否则全部失败(不会处于执行中间的状态);
C.一致性
保证相应的事务处于正确的状态。
I. 隔离性
通过加锁的方法来实现隔离级别(在执行期间与外部隔绝不会被外部看到执行只有执行完成后才可以被看到)。
D.持久性
当事务执行正确时,会永久的保留的。
set@@artocommit=1;时是自动提交
个事务
Rollback回滚事务(回到修改之前的状态);
设置保存点savepoint s1;
回滚到保存点:rollback work to savepoint s1;
事务没有提交,只有当commit执行时才提交,提交后保存点之前的修改才可永久保留
在JDBC中用conn.setAutoCommit(0);修改系统非自动提交。
conn.commit();事务提交
conn.rollback();事务回滚
SavePoint sp=con.setSavePoint();设置保存点
Con.rollback(sp);返回保存点
Con.setTransactionIsolation();设计隔离级别
事物的隔离级别
脏读:读到的线程未提交的数据;(在修改未提交时就让另一个事务读取就是脏读)
不可重复读:在一个事物中读取同一个记录两次,获取数据不同
幻读:在一个事务中,读取到的记录数不同
隔离级别 | 脏读 | 不可重复读 | 幻读 |
读未提交 Read Uncommitted | ü | ||
读已提交 Read Committed | |||
可重复读 Repeatable Read | |||
可序列化 Serializable |
public class TestTransaction {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Connection con=null;
PreparedStatement pst=null;
Savepoint sp=null;
try {
con=JdbcUtil.getConnection();
con.setAutoCommit(false);
con.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);
String str="delete from student where id=3";
pst=con.prepareStatement(str);
System.out.println("第一条sql语句。。");
pst.executeUpdate();
sp=con.setSavepoint();
System.out.println("第二条sql语句...");
str="insert into student(id,name) values(2,'ttt')";
pst=con.prepareStatement(str);
pst.executeUpdate();
con.commit();
System.out.println("事务完成...");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
try {
con.rollback(sp);
con.commit();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}finally{
try {
con.setAutoCommit(true);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
JdbcUtil.release(null,pst, con);
}
}
}
相关文章推荐
- JDBC事务控制管理
- Spring - Jdbc的使用 和 Spring进行事务控制
- JDBC的事务控制和批量处理
- jdbc事务控制
- 小码农的代码(二)----------SpringJDBC事务控制
- JDBC的事务控制和批量处理
- JDBC高级特性(二)事务、并发控制和行集
- 分层架构下的纯JDBC事务控制简单解决方案
- JDBC事务控制
- JDBC高级特性(二)事务、并发控制和行集
- JDBC的事务控制
- 深入探索spring技术内幕(八): Spring +JDBC组合开发和事务控制
- JDBC第四章知识点总结——JDBC高级特性2--事务,并发控制,行集
- JDBC的事务控制
- JDBC 事务控制
- JDBC事务控制管理
- jdbc 中对事务的控制
- 分层架构下的纯JDBC事务控制简单解决方案
- 分层架构下的纯JDBC事务控制简单解决方案
- Java事务管理学习一 -- JDBC的事务控制