Share via


Groot gegevensmonster bijwerken

JDBC-stuurprogramma downloaden

Dit Microsoft JDBC-stuurprogramma voor sql Server-voorbeeldtoepassing laat zien hoe u een grote kolom in een database bijwerkt.

Het codebestand voor dit voorbeeld heeft de naam UpdateLargeData.java en vindt u op de volgende locatie:

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

Requirements

Als u deze voorbeeldtoepassing wilt uitvoeren, hebt u toegang nodig tot de voorbeelddatabase AdventureWorks2025. U moet ook het klassepad instellen om het sqljdbc4.jar-bestand op te nemen. Als in het klassepad een vermelding voor sqljdbc4.jar ontbreekt, genereert de voorbeeldtoepassing de algemene uitzondering 'Klasse niet gevonden'. Zie Het JDBC-stuurprogramma gebruiken voor meer informatie over het instellen van het klassepad.

Opmerking

Het Microsoft JDBC-stuurprogramma voor SQL Server biedt sqljdbc.jar-, sqljdbc4.jar-, sqljdbc41.jar- of sqljdbc42.jar klassebibliotheekbestanden die moeten worden gebruikt, afhankelijk van de instellingen van uw voorkeur voor Java Runtime Environment (JRE). In dit voorbeeld worden de methoden isWrapperFor en uitpakken gebruikt, die zijn geïntroduceerd in de JDBC 4.0-API, voor toegang tot de stuurprogrammaspecifieke reactiebuffermethoden. Als u dit voorbeeld wilt compileren en uitvoeren, hebt u sqljdbc4.jar klassebibliotheek nodig, die ondersteuning biedt voor JDBC 4.0. Zie Systeemvereisten voor het JDBC-stuurprogramma voor meer informatie over welk JAR-bestand u wilt kiezen.

Example

In het volgende voorbeeld maakt de voorbeeldcode een verbinding met de AdventureWorks2025-database. Vervolgens maakt de voorbeeldcode een instructieobject en gebruikt u de methode isWrapperFor om te controleren of het instructieobject een wrapper is voor de opgegeven SQLServerStatement-klasse . De methode uitpakken wordt gebruikt voor toegang tot de stuurprogrammaspecifieke reactiebuffermethoden.

Vervolgens stelt de voorbeeldcode de reactiebuffermodus in als 'adaptief' met behulp van de methode setResponseBuffering van de klasse SQLServerStatement en wordt ook gedemonstreerd hoe u de adaptieve buffermodus kunt ophalen.

Vervolgens wordt de SQL-instructie uitgevoerd en worden de gegevens die worden geretourneerd in een bijwerkbaar SQLServerResultSet-object geplaatst.

Ten slotte doorloopt de voorbeeldcode de rijen met gegevens die zich in de resultatenset bevinden. Als er een lege documentsamenvatting wordt gevonden, worden de combinatie van updateString - en updateRow-methoden gebruikt om de rij met gegevens bij te werken en deze opnieuw in de database te behouden. Als er al gegevens zijn, wordt de getString-methode gebruikt om enkele gegevens weer te geven.

Het standaardgedrag van het stuurprogramma is 'adaptief'. Voor de resultatensets die alleen kunnen worden bijgewerkt en wanneer de gegevens in de resultatenset groter zijn dan het geheugen van de toepassing, moet de toepassing de modus voor adaptieve buffering expliciet instellen met behulp van de methode setResponseBuffering van de klasse 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);
    }
}

Zie ook

Werken met grote gegevens