Share via


Groot gegevensmonster lezen

JDBC-stuurprogramma downloaden

Dit Microsoft JDBC-stuurprogramma voor SQL Server-voorbeeldtoepassing laat zien hoe u een grote eencellige waarde ophaalt uit een SQL Server-database door de methode getCharacterStream te gebruiken.

Het codebestand voor dit voorbeeld heeft de naam ReadLargeData.java en kan worden gevonden 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 jar-bestand mssql-jdbc op te nemen. Zie Het JDBC-stuurprogramma gebruiken voor meer informatie over het instellen van het klassepad.

Opmerking

Het Microsoft JDBC-stuurprogramma voor SQL Server biedt mssql-jdbc-klassebibliotheekbestanden die gebruikt kunnen worden, op basis van de instellingen voor de Java Runtime Environment (JRE). 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 voorbeeldgegevens en werkt u de tabel Production.Document bij met behulp van een geparameteriseerde query.

Daarnaast laat de voorbeeldcode zien hoe u de adaptieve buffermodus kunt ophalen met behulp van de methode getResponseBuffering van de klasse SQLServerStatement . Vanaf de release van het JDBC-stuurprogramma versie 2.0 is de eigenschap responseBuffering-verbinding standaard ingesteld op 'adaptief'.

Vervolgens wordt met behulp van een SQL-instructie met het SQLServerStatement-object de SQL-instructie uitgevoerd en worden de gegevens die worden geretourneerd in een SQLServerResultSet-object geplaatst.

Ten slotte doorloopt de voorbeeldcode de rijen met gegevens die zich in de resultatenset bevinden en gebruikt de methode getCharacterStream om toegang te krijgen tot sommige gegevens.

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();
        }
    }
}

Zie ook

Werken met grote gegevens