Java+Oracle實現事務——JDBC事務,oraclejdbc
J2EE支援JDBC事務、JTA事務和容器事務事務,這裡說一下如何?JDBC事務。
JDBC事務是由Connection對象所控制的,它提供了兩種事務模式:自動認可和手動提交,預設是自動認可。
自動認可就是:在JDBC中,在一個連線物件Connection中,預設把每個SQL語句的執行都當做是一個事務(即每次執行完SQL語句都會立即將操作更新到資料庫)。
手動提交就是:當需要一次性執行多個SQL語句,將多個SQL語句組成一個事務(即要麼都成功,要麼復原所有的操作)時,就得手動提交。
看一個例子:
import java.sql.*;public class TransactionTest{public static void main(String[] args) throws SQLException {try { Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","TransactionTest","123456"); //將事務模式設定為手動提交事務: conn.setAutoCommit(false); //設定事務的隔離等級。 conn.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ); //執行插入操作 String sqlInsert = "insert into t_user(userName,userPassword) values(?,?)"; pstmt = conn.prepareStatement(sqlInsert); pstmt.setString(1, "danny"); pstmt.setString(2, "123"); pstmt.executeUpdate();//執行修改操作 String sqlUpdate = "update t_user set userPassword=? where userName = ?"; pstmt = conn.prepareStatement(sqlUpdate); pstmt.setString(1, "123456"); pstmt.setString(2, "danny"); pstmt.executeUpdate(); //提交事務 conn.commit(); } catch (Exception e) { // 若事務發生異常,復原事務 conn.rollback(); }finally{ if (pstmt!=null) { pstmt.close(); } if (conn!=null) { conn.close(); } }}}
當需要插入和更新這兩個操作同時執行時,要麼兩個操作都成功,如果有一個失敗,則撤銷所有的操作。
宏觀來看需要如下四個步驟:
1、將事務模式設定為手動提交事務:
conn.setAutoCommit(false);
2、設定事務的隔離等級:
conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
3、提交事務:
conn.commit();
4、如果發生異常,復原事務:
conn.rollback();
從上面看,JDBC事務使用較為方便,但由於它是由Connection對象所控制的,所以它的缺點是事務的範圍只局限於一個資料庫的串連,同一個事務中無法操作多個資料庫。
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。