Sdílet prostřednictvím


Čtení velkého vzorku dat

Stáhnout ovladač JDBC

Tento ukázkový ovladač Microsoft JDBC pro SQL Server ukazuje, jak načíst velkou hodnotu s jedním sloupcem z databáze SQL Serveru pomocí metody getCharacterStream .

Soubor kódu pro tuto ukázku má název ReadLargeData.java a najdete ho v následujícím umístění:

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

Požadavky

Ke spuštění této ukázkové aplikace budete potřebovat přístup k ukázkové databázi AdventureWorks2025. Musíte také nastavit classpath, aby obsahovala mssql-jdbc.jar. Další informace o tom, jak nastavit classpath, naleznete v tématu Použití ovladače JDBC.

Poznámka:

Ovladač Microsoft JDBC pro SQL Server poskytuje soubory knihovny tříd mssql-jdbc, které se mají použít v závislosti na preferovaném nastavení prostředí Java Runtime Environment (JRE). Další informace o tom, který soubor JAR zvolit, naleznete v tématu Požadavky na systém pro ovladač JDBC.

Example

V následujícím příkladu vzorový kód vytvoří připojení k databázi AdventureWorks2025. Dále vzorový kód vytvoří ukázková data a aktualizuje tabulku Production.Document pomocí parametrizovaného dotazu.

Kromě toho ukázkový kód ukazuje, jak získat režim adaptivní vyrovnávací paměti pomocí getResponseBuffering metoda SQLServerStatement třídy. Všimněte si, že počínaje vydáním ovladače JDBC verze 2.0 je vlastnost připojení responseBuffering ve výchozím nastavení nastavená na adaptivní.

Potom pomocí příkazu SQL s objektem SQLServerStatement spustí vzorový kód příkaz SQL a umístí data, která vrací do objektu SQLServerResultSet .

Nakonec vzorový kód iteruje řádky dat, které jsou v sadě výsledků, a používá metodu getCharacterStream pro přístup k některým datům.

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

Viz také

Práce s velkými daty