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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JDBC 事务处理

發布時間:2025/3/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JDBC 事务处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

事務的概念

事務處理在數據庫開發中有著非常重要的作用,所謂事務就是所有的操作要么一起成功,要么一起失敗,事務
本身具有原子性(Atomicity)、一致性(Consistency)、隔離性或獨立性(Isolation)、持久性(Durability)4 個特
性,這 4 個特性也被稱為 ACID 特征。

  • 原子性:原子性是事務最小的單元,是不可再分隔的單元,相當于一個個小的數據庫操作,這些操作必須同時成功,如果一個失敗了,則一切的操作將全部失敗。
  • 一致性:指的是在數據庫操作的前后是完全一致的,保證數據的有效性,如果事務正常操作則系統會維持有效性,如果事務出現了錯誤,則回到最原始狀態,也要維持其有效性,這樣保證事務開始時和結束時系統處于一致狀態。
  • 隔離性:多個事務可以同時進行且彼此之間無法訪問,只有當事務完成最終操作時,才可以看到結果;
  • 持久性:事務完成之后,它對于系統的影響是永久性的。該修改即使出現致命的系統故障也將一直保持。

MySQL 對事務的支持

命令描述
SET AUTOCOMMIT=0取消自動提交處理,開啟事務處理
SET AUTOCOMMIT=1打開自動提交處理,關閉事務處理
START TRANSACTION啟動事務
BEGIN啟動事務,相當于執行 START TRANSACTION
COMMIT提交事務
ROLLBACK回滾全部事務
SAVEPOINT 事務保存點名稱設置事務保存點
ROLL BACK TO SAVEPOINT 保存點名稱回滾操作到保存點

JDBC 事務處理

張三向李四轉500

import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException;import com.cn.zj.JDBCUtil.DbUtil;public class demo {private static DbUtil dbUtil=new DbUtil();/*** 轉出* @param con* @param accountName* @param account* @throws Exception*/private static void outCount(Connection con,String accountName,int account)throws Exception{String sql="update t_account set accountBalance=accountBalance-? where accountName=?";PreparedStatement pstmt=con.prepareStatement(sql);pstmt.setInt(1, account);pstmt.setString(2, accountName);pstmt.executeUpdate();}/*** 轉如* @param con* @param accountName* @param account* @throws Exception*/private static void inCount(Connection con,String accountName,int account)throws Exception{String sql="update t_account set accountBalance=accountBalance+? where accountName=?";PreparedStatement pstmt=con.prepareStatement(sql);pstmt.setInt(1, account);pstmt.setString(2, accountName);pstmt.executeUpdate();}public static void main(String[] args) {Connection con=null;try{con=dbUtil.getCon();System.out.println("張三開始向李四轉賬!");int account=500;outCount(con,"張三",account);inCount(con,"李四",account);System.out.println("轉賬成功");}catch(Exception e){e.printStackTrace();}finally{try {con.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}} }

若轉賬錯誤,張三轉了500,但李四沒有收到五百,就要用事務,事務的原子性,一致性

import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException;import com.cn.zj.JDBCUtil.DbUtil;public class demo {private static DbUtil dbUtil=new DbUtil();/*** 轉出* @param con* @param accountName* @param account* @throws Exception*/private static void outCount(Connection con,String accountName,int account)throws Exception{String sql="update t_account set accountBalance=accountBalance-? where accountName=?";PreparedStatement pstmt=con.prepareStatement(sql);pstmt.setInt(1, account);pstmt.setString(2, accountName);pstmt.executeUpdate();}/*** 轉入* @param con* @param accountName* @param account* @throws Exception*/private static void inCount(Connection con,String accountName,int account)throws Exception{//轉入sql語句錯誤String sql="update t_account set accountBalance=account+? where accountName=?";PreparedStatement pstmt=con.prepareStatement(sql);pstmt.setInt(1, account);pstmt.setString(2, accountName);pstmt.executeUpdate();}public static void main(String[] args) {Connection con=null;try{con=dbUtil.getCon();/*** 事務處理*/con.setAutoCommit(false); //取消自動提交System.out.println("張三開始向李四轉賬!");int account=500;outCount(con,"張三",account);inCount(con,"李四",account);System.out.println("轉賬成功");}catch(Exception e){e.printStackTrace();try {con.rollback(); //回滾} catch (SQLException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}finally{try {con.commit(); //提交事務con.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}} }

========================================================================================
DbUtil.java工具類

import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; /*** 通用方法* @author Administrator**/ public class DbUtil {//驅動名稱private static String jdbcName="com.mysql.jdbc.Driver";//mysql數據庫地址private static String dbUrl="jdbc:mysql://localhost:3306/db_band?useUnicode=true&characterEncoding=UTF-8";//用戶名private static String dbUserName="root";//密碼private static String dbPassword="root";//獲取數據庫連接的方法public Connection getCon() throws Exception{Class.forName(jdbcName); //加載驅動Connection con=DriverManager.getConnection(dbUrl, dbUserName, dbPassword);return con;}//關閉數據庫連接public void close(Statement stmt,Connection con)throws Exception{if(stmt!=null){stmt.close();if(con!=null){con.close();}}} }

總結

以上是生活随笔為你收集整理的JDBC 事务处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。