En esta aplicación de ejemplo del Controlador Microsoft JDBC para SQL Server se muestra cómo recuperar un valor grande de una sola columna desde una base de datos de SQL Server mediante el método getCharacterStream.
El archivo de código para este ejemplo se llama readLargeData.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 sqljdbc.jar o el archivo sqljdbc4.jar. Si en la ruta de clase falta una entrada para sqljdbc.jar o 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 (classpath), vea Usar el controlador JDBC.
El Controlador Microsoft JDBC para SQL Server proporciona los archivos de biblioteca de clases sqljdbc.jar y sqljdbc4.jar que hay que usar dependiendo de su configuración preferida de Java Runtime Environment (JRE). 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. Luego, el código muestra crea los datos del ejemplo y actualiza la tabla Production.Document con una consulta con parámetros.
Además, el código demuestra cómo establecer el modo del almacenamiento en búfer adaptable con el método setResponseBuffering 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.
A continuación, con una instrucción SQL con el objeto SQLServerStatement, el código muestra ejecuta la instrucción SQL y coloca los datos que devuelve en un objeto SQLServerResultSet.
Finalmente, el código muestra recorre en iteración las filas de datos contenidas en el conjunto de resultados y utiliza el método getCharacterStream para tener acceso a algunos de los datos que contiene.
import java.sql.*; import java.io.*; 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://localhost:1433;" + "databaseName=AdventureWorks;integratedSecurity=true;"; // 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(); // Display the response buffering mode. SQLServerStatement SQLstmt = (SQLServerStatement) stmt; System.out.println("Response buffering mode is: " + 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) {} } } }