Verwenden der Haltbarkeit

Standardmäßig wird ein Resultset, das in einer Transaktion erstellt wurde, nach einem Commit der Transaktion in der Datenbank oder einem Rollback geschlossen. Bisweilen ist es aber von Nutzen, das Resultset auch nach einem Commit der Transaktion geöffnet zu lassen. Zu diesem Zweck unterstützt der Microsoft SQL Server 2005 JDBC Driver die Verwendung der Resultsethaltbarkeit.

Sie können die Resultsethaltbarkeit mit der setHoldability-Methode der SQLServerConnection-Klasse einstellen. Beim Einstellen der Haltbarkeit mit der setHoldability-Methode können für die Resultsethaltbarkeit die Konstanten HOLD_CURSORS_OVER_COMMIT oder CLOSE_CURSORS_AT_COMMIT verwendet werden.

Hinweis

Beim Erstellen eines Statement-Objekts kann mit dem JDBC-Treiber keine Haltbarkeit eingestellt werden. Statement-Objekte, die mit Parametern für die Resultsethaltbarkeit überladen sind, lösen beim Aufruf eine Ausnahme aus.

Bei der Haltbarkeit eines Resultsets handelt es sich um die Haltbarkeit eines SQLServerConnection-Objekts, das nur beim Erstellen von serverseitigen Cursorn dem Resultset zugeordnet wird. Dies gilt nicht für clientseitige Cursor.

Im folgenden Beispiel wird die Resultsethaltbarkeit beim Ausführen einer lokalen Transaktion mit zwei getrennten Anweisungen im try-Block eingestellt. Die Anweisungen werden für die Production.ScrapReason-Tabelle in der SQL Server 2005 AdventureWorks-Beispieldatenbank ausgeführt. Für das Rollback der zweiten Anweisung wird ein Sicherungspunkt verwendet. Dies führt dazu, dass nur für die erste Anweisung ein Commit in der Datenbank ausgeführt wird.

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();
   }
}

Siehe auch

Andere Ressourcen

Ausführen von Transaktionen mit dem JDBC-Treiber