程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> JDBC事務編程模型備忘

JDBC事務編程模型備忘

編輯:關於JAVA

在Spring一統天下的情況下,JDBC快沒有生存余地了。不過JDBC還是Java操作數據庫的基礎,現在Java項目中JDBC的應用快絕跡了,有必要對JDBC的事務編程模型做個象征性的總結。

下面是示例,保證代碼可以編譯,但不保證能運行,呵呵。

import Java.sql.*;

/**

* JDBC編程事務控制模型備忘

*

* @author : leizhimin,2008-8-21 14:48:42。

*/

public class JdbcTxText {

public static void main(String[] args) {

test();

}

public static void test() {

Connection conn = null;

//定義一個回滾點

Savepoint savepoint1 = null;

try {

//獲取一個數據庫連接

conn = DriverManager.getConnection("url", "user", "passWord");

//設置不自動提交,相當於開啟了事務

conn.setAutoCommit(false);

//設置JDBC事務的級別

conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);

//創建一個用於執行靜態 SQL 語句並返回它所生成結果的對象

Statement stmt = conn.createStatement();

//執行連個SQL語句,在同一個事務中

stmt.executeUpdate("insert into test values(1,'aaa')");

//定義一個回滾到(保存點)savepoint1,在事務失敗的時候,可以回滾到定義的回滾點

savepoint1 = conn.setSavepoint("insert_end");

stmt.executeUpdate("update test set name = 'bbb' where id =1");

//提交事務

conn.commit();

} catch (SQLException e) {

try {

//當事務失敗時候,回滾到(保存點)savepoint1

conn.rollback(savepoint1);

// 當本事務中的插入和更新SQL其中一個執行異常的時候,整個事務回滾

//conn.rollback();

} catch (SQLException e1) {

throw new RuntimeException("回滾事務發生異常!", e);

}

throw new RuntimeException("執行事務發生異常!", e);

} finally {

if (conn != null) {

try {

conn.close();

} catch (SQLException e) {

throw new RuntimeException("關閉數據庫連接發生異常!", e);

}

}

}

}

}

上面代碼中:

//設置JDBC事務的級別

conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);

//當事務失敗時候,回滾到(保存點)savepoint1

conn.rollback(savepoint1);

JDBC的事務級別設置,保存點(或回滾點)的設置與數據庫和JDBC的驅動的實現有關系,並非完全支持,但是不支持也不會出錯。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved