Share via


Lectura de ejemplo de datos grandes

Descargar controlador JDBC

Esta aplicación de ejemplo del controlador JDBC de Microsoft para SQL Server muestra cómo recuperar un valor grande de una sola columna desde una base de datos de SQL Server utilizando el método getCharacterStream.

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

\<installation directory>\sqljdbc_<version>\<language>\samples\adaptive

Requisitos

Para ejecutar esta aplicación de ejemplo, tendrá que acceder a la base de datos de ejemplo AdventureWorks2022. También deberá establecer la ruta de clase para incluir el archivo jar mssql-jdbc. Para obtener más información sobre cómo establecer la ruta de acceso de clase, consulte Usar el controlador JDBC.

Nota:

Microsoft JDBC Driver para SQL Server proporciona los archivos de biblioteca de clases mssql-jdbc que se usan según la configuración preferida de Java Runtime Environment (JRE). Para obtener más información acerca del archivo JAR que se debe seleccionar, consulte Requisitos del sistema para el controlador JDBC.

Ejemplo

En el ejemplo siguiente, el código de ejemplo realiza una conexión a la base de datos AdventureWorks2022. Luego, el código muestra crea los datos del ejemplo y actualiza la tabla Production.Document con una consulta con parámetros.

Además, en el código se indica cómo establecer el modo de almacenamiento en búfer adaptable con el método getResponseBuffering de la clase SQLServerStatement. Tenga en cuenta que desde la publicación de la versión 2.0 del controlador JDBC, la propiedad de conexión responseBuffering se establece en "adaptive" de manera predeterminada.

Después, con una instrucción SQL con el objeto SQLServerStatement, el código ejecuta la instrucción SQL y coloca los datos que devuelve en un objeto SQLServerResultSet.

Por último, el código itera por las filas de datos que se encuentran en el conjunto de resultados y usa el método getCharacterStream para tener acceso a algunos de los datos.

import java.io.IOException;
import java.io.Reader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import com.microsoft.sqlserver.jdbc.SQLServerStatement;

public class ReadLargeData {

    public static void main(String[] args) {
        // Create a variable for the connection string.
        String connectionUrl = "jdbc:sqlserver://<server>:<port>;databaseName=AdventureWorks;user=<user>;password=<password>";
        
        // Create test data as an example.
        StringBuffer buffer = new StringBuffer(4000);
        for (int i = 0; i < 4000; i++)
            buffer.append((char) ('A'));
        
        try (Connection con = DriverManager.getConnection(connectionUrl);
                Statement stmt = con.createStatement();
                PreparedStatement pstmt = con.prepareStatement("UPDATE Production.Document SET DocumentSummary = ? WHERE (DocumentID = 1)");) {

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

            // 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";

            // Display the response buffering mode.
            SQLServerStatement SQLstmt = (SQLServerStatement) stmt;
            System.out.println("Response buffering mode is: " + SQLstmt.getResponseBuffering());
            SQLstmt.close();

            // Get the updated data from the database and display it.
            ResultSet 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 (SQLException | IOException e) {
            e.printStackTrace();
        }
    }
}

Consulte también

Trabajo con datos grandes