日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

JDBC事务案例学习

發(fā)布時(shí)間:2023/10/11 综合教程 97 老码农
生活随笔 收集整理的這篇文章主要介紹了 JDBC事务案例学习 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
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 { // 全局參數(shù)
private Connection con;
private PreparedStatement pstmt; // 1. 轉(zhuǎn)賬,沒有使用事務(wù)
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(); // 默認(rèn)開啟的隱士事務(wù)
con.setAutoCommit(true); /*** 第一次執(zhí)行SQL ***/
pstmt = con.prepareStatement(sql_zs);
pstmt.executeUpdate(); /*** 第二次執(zhí)行SQL ***/
pstmt = con.prepareStatement(sql_ls);
pstmt.executeUpdate(); } catch (Exception e) {
e.printStackTrace();
} finally {
JdbcUtil.closeAll(con, pstmt, null);
} } // 2. 轉(zhuǎn)賬,使用事務(wù)
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(); // 默認(rèn)開啟的隱士事務(wù)
// 一、設(shè)置事務(wù)為手動(dòng)提交
con.setAutoCommit(false); /*** 第一次執(zhí)行SQL ***/
pstmt = con.prepareStatement(sql_zs);
pstmt.executeUpdate(); /*** 第二次執(zhí)行SQL ***/
pstmt = con.prepareStatement(sql_ls);
pstmt.executeUpdate(); } catch (Exception e) {
try {
// 二、 出現(xiàn)異常,需要回滾事務(wù)
con.rollback();
} catch (SQLException e1) {
}
e.printStackTrace();
} finally {
try {
// 三、所有的操作執(zhí)行成功, 提交事務(wù)
con.commit();
JdbcUtil.closeAll(con, pstmt, null);
} catch (SQLException e) {
}
} } // 3. 轉(zhuǎn)賬,使用事務(wù), 回滾到指定的代碼段
public void trans() {
// 定義個(gè)標(biāo)記
Savepoint sp = null; // 第一次轉(zhuǎn)賬
String sql_zs1 = "UPDATE account SET money=money-1000 WHERE accountName='張三';";
String sql_ls1 = "UPDATE account SET money=money+1000 WHERE accountName='李四';"; // 第二次轉(zhuǎn)賬
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(); // 默認(rèn)開啟的隱士事務(wù)
con.setAutoCommit(false); // 設(shè)置事務(wù)手動(dòng)提交 /*** 第一次轉(zhuǎn)賬 ***/
pstmt = con.prepareStatement(sql_zs1);
pstmt.executeUpdate();
pstmt = con.prepareStatement(sql_ls1);
pstmt.executeUpdate(); // 回滾到這個(gè)位置?
sp = con.setSavepoint(); /*** 第二次轉(zhuǎn)賬 ***/
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();
}
}

總結(jié)

以上是生活随笔為你收集整理的JDBC事务案例学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。