JDBC事务

一、JDBC事务

在JDBC中处理事务,都是通过Connection完成的。

同一事务中所有的操作,都在使用同一个Connection对象。

①JDBC中的事务    

Connection的三个方法与事务有关:

setAutoCommit(boolean):设置是否为自动提交事务,如果true(默认值为true)表示自动提交,也就是每条执行的SQL语句都是一个单独的事务,如果设置为false,那么相当于开启了事务了;con.setAutoCommit(false) 表示开启事务。
commit():提交结束事务。
rollback():回滚结束事务。
JDBC处理事务的代码格式:

复制代码
try{
     con.setAutoCommit(false);//开启事务
     ......
     con.commit();//try的最后提交事务      
} catch() {
    con.rollback();//回滚事务
}
复制代码
示例:

复制代码
 1 public class AccountDao {
 2     /*
 3     * 修改指定用户的余额
 4     * */
 5     public void updateBalance(Connection con, String name,double balance) {
 6         try {
 7             String sql = "UPDATE account SET balance=balance+? WHERE name=?";
 8             PreparedStatement pstmt = con.prepareStatement(sql);
 9             pstmt.setDouble(1,balance);
10             pstmt.setString(2,name);
11             pstmt.executeUpdate();
12         }catch (Exception e) {
13             throw new RuntimeException(e);
14         }
15     }
16 }
复制代码
复制代码
 1 import cn.itcast.jdbc.JdbcUtils;
 2 import org.junit.Test;
 3 import java.sql.Connection;
 4 import java.sql.SQLException;
 5 
 6 public class Demo1 {
 7     /*
 8     * 演示转账方法
 9     * 所有对Connect的操作都在Service层进行的处理
10     * 把所有connection的操作隐藏起来,这需要使用自定义的小工具(day19_1)
11     * */
12     public void transferAccounts(String from,String to,double money) {
13         //对事务的操作
14         Connection con = null;
15         try{
16             con = JdbcUtils.getConnection();
17             con.setAutoCommit(false);
18             AccountDao dao = new AccountDao();
19             dao.updateBalance(con,from,-money);//给from减去相应金额
20             if (true){
21                 throw new RuntimeException("不好意思,转账失败");
22             }
23             dao.updateBalance(con,to,+money);//给to加上相应金额
24             //提交事务
25             con.commit();
26 
27         } catch (Exception e) {
28             try {
29                 con.rollback();
30             } catch (SQLException e1) {
31                 e.printStackTrace();
32             }
33             throw new RuntimeException(e);
34         }
35     }
36     @Test
37     public void fun1() {
38         transferAccounts("zs","ls",100);
39     }
40 }
复制代码

二、JDBC设置隔离级别

con.setTransactionIsolation(int level) :参数可选值如下:

Connection.TRANSACTION_READ_UNCOMMITTED;
Connection.TRANSACTION_READ_COMMITTED;
Connection.TRANSACTION_REPEATABLE_READ;
Connection.TRANSACTION_READ_SERIALIZABLE。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值