Compartir a través de


Actualizar un ejemplo de datos grandes

Esta aplicación de ejemplo del controlador JDBC de Microsoft SQL Server muestra cómo actualizar una columna grande en una base de datos.

El archivo de código para este ejemplo se llama updateLargeData.java y se encuentra en la siguiente ubicación:

<directorio de instalación>\sqljdbc_<versión>\<idioma>\help\samples\adaptive

Requisitos

Para ejecutar esta aplicación de ejemplo, deberá tener acceso a la base de datos de ejemplo SQL Server 2005 AdventureWorks. También deberá establecer la ruta de clase para incluir el archivo sqljdbc4.jar. Si en la ruta de clase falta una entrada para sqljdbc4.jar, la aplicación de ejemplo produce la excepción común "Clase no encontrada". Para obtener más información acerca de cómo establecer la ruta de clase, vea Usar el controlador JDBC.

Nota

El controlador JDBC de Microsoft SQL Server proporciona los archivos de la biblioteca de clases sqljdbc.jar y sqljdbc4.jar que hay que usar dependiendo de su configuración preferida de Java Runtime Environment (JRE). Este ejemplo usa los métodos isWrapperFor y unwrap, que se incluyen en la API de JDBC 4.0, para obtener los métodos de almacenamiento en búfer de respuesta específicos del controlador. Para compilar y ejecutar este ejemplo, necesitará la biblioteca de clases sqljdbc4.jar, que proporciona compatibilidad con JDBC 4.0. Para obtener más información acerca del archivo JAR que hay que elegir, vea Requisitos del sistema para el controlador JDBC.

Ejemplo

En el siguiente ejemplo, el código muestra realiza una conexión a la base de datos SQL Server 2005 AdventureWorks. Después, el código muestra crea un objeto Statement y usa el método isWrapperFor para comprobar si el objeto es un contenedor de la clase SQLServerStatement especificada. El método unwrap se usa para obtener acceso a los métodos de almacenamiento en búfer de respuestas específicas del controlador.

Después, el código muestra establece el modo de almacenamiento en búfer de respuestas como "adaptive" mediante el uso del método setResponseBuffering de la clase SQLServerStatement, además de mostrar cómo obtener el modo de almacenamiento en búfer adaptable.

Después, ejecuta la instrucción SQL y coloca los datos que devuelve en un objeto SQLServerResultSet actualizable.

Finalmente, el código muestra recorre en iteración las filas de datos que están contenidas en el conjunto de resultados. Si encuentra un resumen de documento vacío, usa la combinación de los métodos updateString y updateRow para actualizar las filas de datos y vuelve a almacenar los datos en la base de datos. Si hay ya datos, usa el método getString para mostrar algunos de los datos que contiene.

Tenga en cuenta que desde la versión 2.0 del controlador JDBC, el comportamiento predeterminado del controlador es "adaptive.". Sin embargo, para los conjuntos de resultados adaptables de solo avance y cuando los datos del conjunto de resultados es mayor que la memoria de la aplicación, la aplicación tiene que configurar explícitamente el modo de almacenamiento en búfer adaptable usando el método setResponseBuffering de la clase SQLServerStatement.

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

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

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

      // Declare the JDBC objects.
      Connection con = null;
      Statement stmt = null;
      ResultSet rs = null;  
      Reader reader = null;
           
      try {
          // Establish the connection.
          Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
          con = DriverManager.getConnection(connectionUrl);
         
          stmt = con.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);

          // Since the summaries could be large, make sure that
          // the driver reads them incrementally from a database, 
          // even though a server cursor is used for the updatable result sets.
          
          // The recommended way to access the Microsoft SQL Server JDBC Driver 
          // specific methods is to use the JDBC 4.0 Wrapper functionality. 
          // The following code statement demonstrates how to use the 
          // Statement.isWrapperFor and Statement.unwrap methods
          // to access the driver specific response buffering methods.
          
          if (stmt.isWrapperFor(com.microsoft.sqlserver.jdbc.SQLServerStatement.class)) {
              SQLServerStatement SQLstmt = 
                 stmt.unwrap(com.microsoft.sqlserver.jdbc.SQLServerStatement.class);
              
              SQLstmt.setResponseBuffering("adaptive");
              System.out.println("Response buffering mode has been set to " +
                 SQLstmt.getResponseBuffering());
          }

          // Select all of the document summaries.
          rs = stmt.executeQuery("SELECT Title, DocumentSummary FROM Production.Document");

          // Update each document summary.
          while (rs.next()) {

               // Retrieve the original document summary.
               reader = rs.getCharacterStream("DocumentSummary");

               if (reader == null)
               {
                   // Update the document summary.
                   System.out.println("Updating " + rs.getString("Title"));
                   rs.updateString("DocumentSummary", "Work in progress");
                   rs.updateRow();
               }
               else
               {
                   // Do something with the chunk of the data that was                   
                   // read.
                   System.out.println("reading " + rs.getString("Title"));
                   reader.close();
                   reader = null;
               }
          }
      }
      // Handle any errors that may have occurred.
      catch (Exception e) {
         e.printStackTrace();
      }
      finally {
          if (reader != null) try { reader.close(); } catch(Exception e) {}
          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) {}
      }
   }
}

Vea también

Otros recursos

Trabajar con datos grandes