共用方式為


使用保留性

根據預設,在交易內建立的結果集,會在交易認可到資料庫之後或在交易回復時關閉。不過,有時候即使已認可交易之後,讓結果集保持為開啟仍會很有用。為了達到此目的,Microsoft SQL Server 2005 JDBC Driver 支援使用結果集保留性。

可以使用 SQLServerConnection 類別的 setHoldability 方法來設定結果集保留性。使用 setHoldability 方法設定保留性時,可以使用結果集保留性的 HOLD_CURSORS_OVER_COMMIT 或 CLOSE_CURSORS_AT_COMMIT 常數。

注意

JDBC 驅動程式在建立其中一個 Statement 物件時,不支援設定保留性。呼叫具有多載 (其中帶有結果集保留性參數) 的陳述式物件時,會發生例外狀況。

結果集的保留性是 SQLServerConnection 物件的保留性,該物件只有在對伺服器端資料指標建立結果集時,才與結果集相關聯。它不適用於用戶端資料指標。

在下列範例中,會在執行本機交易 (該交易是由 try 區塊中兩個個別陳述式所組成) 時,設定結果集保留性。這些陳述式是針對 SQL Server 2005 AdventureWorks 範例資料庫中的 Production.ScrapReason 資料表執行,並使用儲存點來回復第二個陳述式。這樣會造成只有第一個陳述式認可到資料庫。

public static void executeTransaction(Connection con) {
   try {
      con.setAutoCommit(false);
      con.setHoldability(ResultSet.HOLD_CURSORS_OVER_COMMIT);
      Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
      stmt.executeUpdate("INSERT INTO Production.ScrapReason(Name) VALUES('Bad part')");
      ResultSet rs = stmt.executeQuery("SELECT * FROM Production.ScrapReason");
      con.commit();
      System.out.println("Transaction succeeded.");

      //Display results.
      while (rs.next()) {
         System.out.println(rs.getString(2));
      }
      stmt.close();
   }
   catch (SQLException ex) {
      ex.printStackTrace();
   try {
      con.rollback();
      System.out.println("Transaction failed.");
   }
   catch (SQLException se) {
      se.printStackTrace();
   }
}

另請參閱

其他資源

以 JDBC 驅動程式執行交易