Partilhar via


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