Freigeben über


Beispiel zum Festlegen der adaptiven Pufferung

In dieser Microsoft SQL Server 2005 JDBC Driver-Beispielanwendung wird das Festlegen der adaptiven Pufferung in einer Verbindungs-URL und auf Anweisungsebene veranschaulicht. Darüber hinaus wird gezeigt, wie ein großer Wert in einer Spalte mithilfe der getCharacterStream-Methode aus einer SQL Server-Datenbank abgerufen wird.

Die Codedatei für dieses Beispiel heißt useAdaptiveBuffering.java und befindet sich an folgendem Speicherort:

<Installationsverzeichnis>\sqljdbc_<Version>\<Sprache>\help\samples\adaptive

Anforderungen

Wenn Sie diese Beispielanwendung ausführen möchten, müssen Sie die Datei sqljdbc.jar in den Klassenpfad aufnehmen. Wenn im Klassenpfad kein Eintrag für "sqljdbc.jar" vorhanden ist, löst die Beispielanwendung die allgemeine Ausnahme "Klasse nicht gefunden" aus. Sie benötigen darüber hinaus Zugriff auf die SQL Server 2005 AdventureWorks-Beispieldatenbank.

Weitere Informationen zum Festlegen des Klassenpfads finden Sie unter Verwenden des JDBC-Treibers.

Beispiel

Der folgende Beispielcode legt die responseBuffering-Verbindungseigenschaft sowie verschiedene Verbindungseigenschaften in der Verbindungs-URL fest und stellt dann eine Verbindung zur SQL Server 2005 AdventureWorks-Datenbank her. Im Beispielcode werden anschließend Beispieldaten erstellt, und die Tabelle Production.Document wird mithilfe einer parametrisierten Abfrage aktualisiert.

Außerdem wird im Beispielcode veranschaulicht, wie der Modus für die adaptive Pufferung mithilfe der setResponseBuffering-Methode der SQLServerStatement-Klasse festgelegt wird. Sie müssen diese Methode nur aufrufen, wenn Sie in den Verbindungseigenschaften nicht bereits responseBuffering=adaptive festgelegt haben.

Anschließend wird im Beispielcode eine SQL-Anweisung mit dem SQLServerStatement-Objekt verwendet. Die SQL-Anweisung wird ausgeführt, und die zurückgegebenen Daten werden in ein SQLServerResultSet-Objekt eingefügt.

Schließlich durchläuft der Beispielcode die Datenzeilen im Resultset und greift mithilfe der getCharacterStream-Methode auf einige der darin enthaltenen Daten zu.

import java.sql.*;
import java.io.*;
import com.microsoft.sqlserver.jdbc.SQLServerStatement;

public class useAdaptiveBuffering {
    
   public static void main(String[] args) {

      // Create a variable for the connection string.
      String connectionUrl = 
            "jdbc:sqlserver://localhost:1433;" +
            "databaseName=AdventureWorks;integratedSecurity=true;" +
            "responseBuffering=adaptive";

      // Declare the JDBC objects.
      Connection con = null;
      Statement stmt = null;
      ResultSet rs = null;  
           
      try {
          // Establish the connection.
          Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
          con = DriverManager.getConnection(connectionUrl);
         
          // Create test data as an example.
          StringBuffer buffer = new StringBuffer(4000);
          for (int i = 0; i < 4000; i++) 
              buffer.append( (char) ('A'));
            
          PreparedStatement pstmt = con.prepareStatement(
                    "UPDATE Production.Document " +
                     "SET DocumentSummary = ? WHERE (DocumentID = 1)");

          pstmt.setString(1, buffer.toString());
          pstmt.executeUpdate();
          pstmt.close();

          // In adaptive mode, the application does not have to use a server cursor 
          // to avoid OutOfMemoryError when the SELECT statement produces very large
          // results. 

          // Create and execute an SQL statement that returns some data.
          String SQL = "SELECT Title, DocumentSummary " +
                       "FROM Production.Document";
          stmt = con.createStatement();

          // If you have not already set the responseBuffering=adaptive in the 
          // connection properties, you can set the response buffering to adaptive 
          // on the statement level before executing the query, such as:          
          SQLServerStatement SQLstmt = (SQLServerStatement) stmt;
          SQLstmt.setResponseBuffering("adaptive");       
          
          // Display the response buffering mode.
          System.out.println("Response buffering mode has been set to " +
             SQLstmt.getResponseBuffering());          
          
          // Get the updated data from the database and display it.
          rs = stmt.executeQuery(SQL);
                      
          while (rs.next()) {
               Reader reader = rs.getCharacterStream(2);
               if (reader != null)
               {
                  char output[] = new char[40];
                  while (reader.read(output) != -1)
                  {
                      // Do something with the chunk of the data that was                       
                      // read.
                  }              
 
                  System.out.println(rs.getString(1) + 
                      " has been accessed for the summary column.");
                  // Close the stream.
                  reader.close();
               }
          }
      }
      // Handle any errors that may have occurred.
      catch (Exception e) {
         e.printStackTrace();
      }
      finally {
          if (rs != null) try { rs.close(); } catch(Exception e) {}
          if (stmt != null) try { stmt.close(); } catch(Exception e) {}
          if (con != null) try { con.close(); } catch(Exception e) {}
      }
   }
}

Siehe auch

Andere Ressourcen

Arbeiten mit adaptiver Pufferung