Bagikan melalui


Membaca sampel data besar

Unduh driver JDBC

Aplikasi sampel Microsoft JDBC Driver for SQL Server ini menunjukkan cara mengambil nilai kolom tunggal yang besar dari database SQL Server dengan menggunakan metode getCharacterStream.

File kode untuk sampel ini bernama ReadLargeData.java, dan dapat ditemukan di lokasi berikut:

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

Persyaratan

Untuk menjalankan aplikasi sampel ini, Anda memerlukan akses ke database sampel AdventureWorks2022. Anda juga harus mengatur classpath untuk menyertakan file jar mssql-jdbc. Untuk informasi selengkapnya tentang cara mengatur classpath, lihat Menggunakan Driver JDBC.

Catatan

Driver Microsoft JDBC untuk SQL Server menyediakan file pustaka kelas mssql-jdbc untuk digunakan tergantung pada pengaturan Java Runtime Environment (JRE) pilihan Anda. Untuk informasi selengkapnya tentang file JAR mana yang akan dipilih, lihat Persyaratan Sistem untuk Driver JDBC.

Contoh

Dalam contoh berikut, kode sampel membuat koneksi ke database AdventureWorks2022. Selanjutnya, kode sampel membuat data sampel dan memperbarui tabel Production.Document dengan menggunakan kueri berparameter.

Selain itu, kode sampel menunjukkan cara mendapatkan mode buffering adaptif dengan menggunakan metode getResponseBuffering dari kelas SQLServerStatement . Perhatikan bahwa dimulai dengan rilis driver JDBC versi 2.0, properti koneksi responseBuffering diatur ke "adaptif" secara default.

Kemudian, menggunakan pernyataan SQL dengan objek SQLServerStatement , kode sampel menjalankan pernyataan SQL dan menempatkan data yang dikembalikannya ke dalam objek SQLServerResultSet .

Terakhir, kode sampel melakukan iterasi melalui baris data yang ada dalam kumpulan hasil, dan menggunakan metode getCharacterStream untuk mengakses beberapa data.

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

Lihat juga

Bekerja dengan data besar