Megosztás:


Nagy adatminta olvasása

JDBC-illesztőprogram letöltése

Ez az SQL Server-mintaalkalmazáshoz készült Microsoft JDBC-illesztő bemutatja, hogyan kérhet le nagy méretű egyoszlopos értéket egy SQL Server-adatbázisból a getCharacterStream metódussal.

A minta kódfájljának neve ReadLargeData.java, és a következő helyen található:

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

Requirements

A mintaalkalmazás futtatásához hozzá kell férnie az AdventureWorks2025 mintaadatbázishoz. Meg kell adnia az osztályútvonalat is, hogy tartalmazza az mssql-jdbc jar fájlt. Az osztályút beállításáról további információt a JDBC-illesztőprogram használata című témakörben talál.

Megjegyzés:

Az SQL ServerHez készült Microsoft JDBC-illesztőprogram mssql-jdbc osztálytárfájlokat biztosít, amelyeket az előnyben részesített Java Futtatókörnyezet (JRE) beállításaitól függően kell használni. További információ arról, hogy melyik JAR-fájlt válassza, lásd a JDBC-illesztőprogram rendszerkövetelményei című témakört.

Example

Az alábbi példában a mintakód kapcsolatot létesít az AdventureWorks2025 adatbázissal. Ezután a mintakód létrehoz egy mintaadatokat, és paraméteres lekérdezéssel frissíti a Production.Document táblát.

A mintakód emellett bemutatja, hogyan szerezheti be az adaptív pufferelési módot az SQLServerStatement osztály getResponseBuffering metódusával. Vegye figyelembe, hogy a JDBC-illesztőprogram 2.0-s verziójától kezdve a responseBuffering kapcsolati tulajdonság alapértelmezés szerint "adaptív" értékre van állítva.

Ezután az SQLServerStatement objektummal rendelkező SQL-utasítás használatával a mintakód futtatja az SQL-utasítást, és a visszaadott adatokat egy SQLServerResultSet-objektumba helyezi.

Végül a mintakód végigvezeti az eredményhalmazban lévő adatsorokat, és a getCharacterStream metódussal éri el az adatok egy részét.

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

Lásd még

Nagyméretű adatok használata