Java+Oracle實現事務——JDBC事務,oraclejdbc

來源:互聯網
上載者:User

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對象所控制的,所以它的缺點是事務的範圍只局限於一個資料庫的串連,同一個事務中無法操作多個資料庫。



著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.