JDBC事务案例学习
生活随笔
收集整理的這篇文章主要介紹了
JDBC事务案例学习
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
package com.loaderman.demo.d_tx; import com.loaderman.demo.utils.JdbcUtil; import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Savepoint; public class AccountDao { // 全局參數
private Connection con;
private PreparedStatement pstmt; // 1. 轉賬,沒有使用事務
public void trans1() { String sql_zs = "UPDATE account SET money=money-1000 WHERE accountName='張三';";
String sql_ls = "UPDATE account SET money=money+1000 WHERE accountName='李四';"; try {
con = JdbcUtil.getConnection(); // 默認開啟的隱士事務
con.setAutoCommit(true); /*** 第一次執行SQL ***/
pstmt = con.prepareStatement(sql_zs);
pstmt.executeUpdate(); /*** 第二次執行SQL ***/
pstmt = con.prepareStatement(sql_ls);
pstmt.executeUpdate(); } catch (Exception e) {
e.printStackTrace();
} finally {
JdbcUtil.closeAll(con, pstmt, null);
} } // 2. 轉賬,使用事務
public void trans2() { String sql_zs = "UPDATE account SET money=money-1000 WHERE accountName='張三';";
String sql_ls = "UPDATE1 account SET money=money+1000 WHERE accountName='李四';"; try {
con = JdbcUtil.getConnection(); // 默認開啟的隱士事務
// 一、設置事務為手動提交
con.setAutoCommit(false); /*** 第一次執行SQL ***/
pstmt = con.prepareStatement(sql_zs);
pstmt.executeUpdate(); /*** 第二次執行SQL ***/
pstmt = con.prepareStatement(sql_ls);
pstmt.executeUpdate(); } catch (Exception e) {
try {
// 二、 出現異常,需要回滾事務
con.rollback();
} catch (SQLException e1) {
}
e.printStackTrace();
} finally {
try {
// 三、所有的操作執行成功, 提交事務
con.commit();
JdbcUtil.closeAll(con, pstmt, null);
} catch (SQLException e) {
}
} } // 3. 轉賬,使用事務, 回滾到指定的代碼段
public void trans() {
// 定義個標記
Savepoint sp = null; // 第一次轉賬
String sql_zs1 = "UPDATE account SET money=money-1000 WHERE accountName='張三';";
String sql_ls1 = "UPDATE account SET money=money+1000 WHERE accountName='李四';"; // 第二次轉賬
String sql_zs2 = "UPDATE account SET money=money-500 WHERE accountName='張三';";
String sql_ls2 = "UPDATE1 account SET money=money+500 WHERE accountName='李四';"; try {
con = JdbcUtil.getConnection(); // 默認開啟的隱士事務
con.setAutoCommit(false); // 設置事務手動提交 /*** 第一次轉賬 ***/
pstmt = con.prepareStatement(sql_zs1);
pstmt.executeUpdate();
pstmt = con.prepareStatement(sql_ls1);
pstmt.executeUpdate(); // 回滾到這個位置?
sp = con.setSavepoint(); /*** 第二次轉賬 ***/
pstmt = con.prepareStatement(sql_zs2);
pstmt.executeUpdate();
pstmt = con.prepareStatement(sql_ls2);
pstmt.executeUpdate(); } catch (Exception e) {
try {
// 回滾 (回滾到指定的代碼段)
con.rollback(sp);
} catch (SQLException e1) {
}
e.printStackTrace();
} finally {
try {
// 提交
con.commit();
} catch (SQLException e) {
}
JdbcUtil.closeAll(con, pstmt, null);
} }
}
package com.loaderman.demo.d_tx;
import org.junit.Test;
public class App {
@Test
public void testname() throws Exception { AccountDao accountDao = new AccountDao();
accountDao.trans();
}
}
總結
以上是生活随笔為你收集整理的JDBC事务案例学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Codeforces 542A Plac
- 下一篇: Lucene 个人领悟 (一)