JavaBean中使用JDBC方式進行事務處理
在JavaBean資料庫操作中,一項事務是指由一條或多條對資料庫更新的sql語句所組成的一個不可分割的工作單元。只有當事務中的所有操作都正常完成了,整個事務才能被提交到資料庫,如果有一項操作沒有完成,就必須撤消整個事務。我們通過提交commit()或是回滾rollback()來結束事務的操作。關於事務操作的方法都位於介面java.sql.Connection中。
在第一次建立與資料庫的連線時,在預設情況下,連線是在自動提交模式下的, jdbc api中,可以通過呼叫setAutoCommit(false) 來禁止自動提交事務。然後就可以把多條更新資料庫的sql語句做為一個事務,在所有操作完成之後,呼叫commit()來進行整體提交。倘若其中一項sql操作失敗,就不會執行commit()方法,而是產生相應的sqlexception,此時就可以捕獲異常程式碼塊中呼叫rollback()方法撤消事務。下面是一個例子;
比如:有兩張表,一個記錄使用者帳戶(useraccount),一個是系統帳(sysaccount),現在有一個使用者要向系統寄錢買東西,就要此行下面兩條語句:
String sql1 = "update useraccount set monery=monery-1000 where name='username'";
String sql2 = "update sysaccount set monery=monery+1000 where name='sysname'";
但如果第一條執行了而第二條語句執行出錯了就會造成不良後果。這是就可以用手動提交的方式來防止這種事情的發生:主要程式碼
try{
.
.
.
conn=DriverManager.getConnection("..."); //連結資料庫
conn.setAutoCommit(false);//禁止自動提交事務
stmt = conn.Create....
String sql1 = "update useraccount set monery=monery-1000 where name='usename'";
String sql2 = "update sysaccount set monery=monery+1000 where name='sysname'";
stmt=conn.createStatement();
stmt.executeUpdate(sql1);
stmt.executeUpdate(sql2);
conn.commit(); //統一提交。
}catch(SQLException e){
conn.rollback(); //倘若其中一項sql操作失敗,就不會執行commit()方法,而是產生相應的sqlexception,此時就可以捕獲 異常程式碼塊中呼叫rollback()方法撤消事務。
e.printStackTrace();
}
finally{
if(stmt!=null){
stmt.close();
}
if(conn!=null){
stmt.close();
}
}
相關文章
- Redis使用IO多路複用進行事件處理機制Redis事件
- 博文推薦|使用 Apache Pulsar 和 Scala 進行事件流處理Apache事件
- JDBC當中的批處理JDBC
- JDBC中Date日期物件的處理JDBC物件
- JDBC與JavaBean學習筆記(二)JDBCJavaBean筆記
- 聊聊專案中定時任務的處理方式
- Ajax 處理時進度條使用
- 使用Sql插入sde是ObjectId的處理方式SQLObject
- 在Linux中,如何使用awk和sed進行文字處理?Linux
- error的處理方式Error
- ETL中後設資料處理的方式
- C#中處理JSON資料的方式C#JSON
- JDBC 處理CLob和Blob型別資料JDBC型別
- JDBC連線批量處理資料入庫JDBC
- oracle使用者鎖住、過期處理方式Oracle
- Python使用struct處理二進位制PythonStruct
- .NET使用MailKit進行郵件處理AI
- Spring整合Quartz案例使用JDBC儲存方式SpringquartzJDBC
- LoadRunner中多值關聯的3種處理方式
- Node中POST請求的正確處理方式
- 異常處理方式throws
- 使用 Intervention/image 對 Laravel 專案中的圖片進行處理Laravel
- Java中的任務超時處理Java
- 併發問題處理方式
- 分散式事務處理方案,微服事務處理方案分散式
- 26. 使用MySQL之管理事務處理MySql
- 使用matlab對影像進行二值化處理Matlab
- 使用python進行簡單的媒體處理Python
- 實驗四 JavaBean及Servlet使用JavaBeanServlet
- mysqli 事務處理MySql
- MySQL事務處理MySql
- springboot事務處理Spring Boot
- Laravel 7使用swoole+redis每秒處理任務LaravelRedis
- 使用Lambda表示式處理簡單的業務
- React 中常用的事件處理方式React事件
- Hadoop小檔案的處理方式Hadoop
- 行連線的處理方式指引
- Spring @Transaction 註解是如何執行事務的?Spring