Partilhar via


Atualização de Grande Amostra de Dados

Baixar driver JDBC

Esta aplicação de exemplo do Microsoft JDBC Driver para SQL Server demonstra como atualizar uma coluna grande numa base de dados.

O ficheiro de código deste exemplo chama-se UpdateLargeData.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 sqljdbc4.jar. Se o caminho da classe estiver em falta de uma entrada para sqljdbc4.jar, a aplicação de exemplo irá lançar a exceção comum "Classe não encontrada". 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 sqljdbc.jar, sqljdbc4.jar, sqljdbc41.jar ou sqljdbc42.jar para serem usados, dependendo das definições preferidas do Java Runtime Environment (JRE). Este exemplo utiliza os métodos isWrapperFor e unwrap , que são introduzidos na API JDBC 4.0, para aceder aos métodos de buffering de resposta específicos do driver. Para compilar e executar este exemplo, será necessário sqljdbc4.jar biblioteca de classes, que oferece suporte para JDBC 4.0. 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. Depois, o código de exemplo cria um objeto Statement e utiliza o método isWrapperFor para verificar se o objeto Statement é um wrapper para a classe SQLServerStatement especificada. O método unwrap é usado para aceder aos métodos de buffering de resposta específicos do driver.

De seguida, o código de exemplo define o modo de buffering de resposta como "adaptativo" usando o método setResponseBuffering da classe SQLServerStatement e também demonstra como obter o modo de buffering adaptativo.

Depois, executa a instrução SQL e coloca os dados que devolve num objeto SQLServerResultSet atualizável.

Finalmente, o código de exemplo itera através das linhas de dados que estão no conjunto de resultados. Se encontrar um resumo de documento vazio, utiliza a combinação dos métodos updateString e updateRow para atualizar a linha de dados e voltar a mantê-la na base de dados. Se já houver dados, usa o método getString para mostrar alguns dos dados.

O comportamento padrão do driver é "adaptativo". No entanto, para os conjuntos de resultados atualizáveis apenas para frente e quando os dados no conjunto de resultados são maiores do que a memória da aplicação, a aplicação tem de definir explicitamente o modo de buffering adaptativo usando o método setResponseBuffering da classe SQLServerStatement .

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

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://<server>:<port>;databaseName=AdventureWorks;user=<user>;password=<password>";

        // Establish the connection.
        try (Connection con = DriverManager.getConnection(connectionUrl); Statement stmt = con.createStatement();
                Statement stmt1 = con.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);) {

            createTable(stmt);

            // Since the summaries could be large, we should 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 JDBC Driver for SQL Server
            // 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.
            try (ResultSet rs = stmt1.executeQuery("SELECT Title, DocumentSummary FROM Document_JDBC_Sample")) {

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

                    // Retrieve the original document summary.
                    try (Reader 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();
                        }
                    }
                }
            }
        }
        // Handle any errors that may have occurred.
        catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void createTable(Statement stmt) throws SQLException {
        stmt.execute("if exists (select * from sys.objects where name = 'Document_JDBC_Sample')"
                + "drop table Document_JDBC_Sample");

        String sql = "CREATE TABLE Document_JDBC_Sample (" + "[DocumentID] [int] NOT NULL identity,"
                + "[Title] [char](50) NOT NULL," + "[DocumentSummary] [varchar](max) NULL)";

        stmt.execute(sql);

        sql = "INSERT Document_JDBC_Sample VALUES ('title1','summary1') ";
        stmt.execute(sql);

        sql = "INSERT Document_JDBC_Sample (title) VALUES ('title2') ";
        stmt.execute(sql);

        sql = "INSERT Document_JDBC_Sample (title) VALUES ('title3') ";
        stmt.execute(sql);

        sql = "INSERT Document_JDBC_Sample VALUES ('title4','summary3') ";
        stmt.execute(sql);
    }
}

Consulte também

Trabalhar com Big Data