Leitura de grande amostra de dados

Baixar driver JDBC

Esta aplicação de exemplo do Microsoft JDBC Driver para SQL Server demonstra como recuperar um valor grande de uma única coluna a partir de uma base de dados SQL Server usando o método getCharacterStream .

O ficheiro de código deste exemplo chama-se ReadLargeData.java e pode ser encontrado na seguinte localização:

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

Requerimentos

Para executar esta aplicação de exemplo, precisará de acesso à base de dados de exemplo AdventureWorks2025. Também deve definir o caminho da classe para incluir o ficheiro jar mssql-jdbc. Para mais informações sobre como definir o percurso de classes, veja Usar o Driver JDBC.

Observação

O Microsoft JDBC Driver para SQL Server fornece ficheiros de biblioteca de classes mssql-jdbc para serem usados dependendo das definições do seu Java Runtime Environment (JRE) preferidas. Para mais informações sobre qual ficheiro JAR escolher, consulte Requisitos de Sistema para o Driver JDBC.

Example

No exemplo seguinte, o código de exemplo faz uma ligação à base de dados AdventureWorks2025. De seguida, o código de exemplo cria dados de exemplo e atualiza a tabela Production.Document usando uma consulta parametrizada.

Além disso, o código de exemplo demonstra como obter o modo de buffering adaptativo usando o método getResponseBuffering da classe SQLServerStatement . Note-se que, a partir da versão 2.0 do driver JDBC, a propriedade de ligação responseBuffering está definida como "adaptive" por predefinição.

Depois, usando uma instrução SQL com o objeto SQLServerStatement , o código de exemplo executa a instrução SQL e coloca os dados que devolve num objeto SQLServerResultSet .

Finalmente, o código de exemplo itera pelas linhas de dados que estão no conjunto de resultados e utiliza o método getCharacterStream para aceder a alguns dos dados.

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 a 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 também

Trabalhar com big data