数据库事务
事务:一组逻辑操作单元,使数据从一种状态变换到另一种状态 事务处理(事务操作):保证所有事务都作为一个工作单元来执行,即使出现了故障,都不能改变这种执行方式,当在一个事务中执行多个操作时,要么所有的事务都被提交(commit),那么这些修改就永久的保存下来,要么数据库管理系统将放弃所做的所有更改,整个事务回滚到最初状态
JDBC事务处理
数据一旦被提交,就不可回滚数据什么时候意味着提交?
当一个连接对象被创建时,默认情况下式自动提交事务,每次执行一个SQL语句时,如果执行成功,就会向数据库自动提交,而且不能回滚关闭数据库连接,数据就会自动的提交,如果多个操作,每个操作使用的是自己单独的连接,则无法保证事务,即同于个事务的多个操作必须在同一个连接下 JDBC程序为了让多个SQL语句作为一个事务执行
调用Connection对象的setAutoCommit(false),以取消自动提交事务
@Test
public void txUpdate(){
Connection connection
= null
;
try {
connection
= JdbcUtils
.getConnection();
connection
.setAutoCommit(false);
update1();
update2();
connection
.commit();
} catch (Exception e
) {
connection
.rollback();
System
.out
.println(e
.getMessage());
}finally {
if(connection
!= null
) {
connection
.close();
}
}
}
若此时Connection没有被关闭,还可能被重复使用,则需要恢复期自动提交状态setAutoCommit(true),尤其是使用数据库连接池技术时,执行close()方法前,建议恢复期自动提交状态。 java代码设置数据库隔离级别: connection.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); //读已提交,可避免脏读