Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Aplikasi sampel Microsoft JDBC Driver for SQL Server ini menunjukkan cara mengambil sekumpulan besar data dari database. Kemudian mengontrol jumlah baris data yang di-cache pada klien dengan menggunakan metode setFetchSize objek SQLServerResultSet .
Catatan
Membatasi jumlah baris yang di-cache pada klien berbeda dari membatasi jumlah total baris yang dapat dimuat oleh kumpulan hasil. Untuk mengontrol jumlah total baris yang terkandung dalam kumpulan hasil, gunakan metode setMaxRows objek SQLServerStatement , yang diwarisi oleh objek SQLServerPreparedStatement dan SQLServerCallableStatement .
Untuk mengatur batas jumlah baris yang di-cache pada klien, tentukan jenis kursor yang menggunakan kursor sisi server saat membuat objek Pernyataan. Misalnya, driver JDBC menyediakan jenis kursor TYPE_SS_SERVER_CURSOR_FORWARD_ONLY, yang merupakan kursor sisi server baca-saja yang cepat dan baca-saja untuk digunakan dengan database SQL Server.
Catatan
Alternatif untuk menggunakan jenis kursor khusus SQL Server adalah menggunakan properti selectMethod string koneksi, mengatur nilainya ke "kursor". Untuk informasi selengkapnya tentang jenis kursor yang didukung oleh driver JDBC, lihat Memahami jenis kursor.
Setelah Anda menjalankan kueri di objek Pernyataan dan data dikembalikan ke klien sebagai kumpulan hasil, panggil setFetchSize untuk mengontrol berapa banyak data yang diambil dari database sekaligus. Misalnya, jika Anda memiliki tabel dengan 100 baris data, dan ukuran pengambilan adalah 10, hanya 10 baris data yang di-cache pada klien pada satu waktu. Meskipun pengaturan ini dapat memperlambat kecepatan di mana data diproses, pengaturan ini menggunakan lebih sedikit memori pada klien. Skenario ini berguna ketika Anda perlu memproses data dalam jumlah besar tanpa menggunakan terlalu banyak memori.
File kode untuk sampel ini diberi nama CacheResultSet.java, dan dapat ditemukan di lokasi berikut:
\<installation directory>\sqljdbc_<version>\<language>\samples\resultsets
Persyaratan
Untuk menjalankan aplikasi sampel ini, atur classpath untuk menyertakan file jar mssql-jdbc. Anda juga memerlukan akses ke database sampel AdventureWorks2025. 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 sampel AdventureWorks2025. Kemudian menggunakan pernyataan SQL dengan objek SQLServerStatement , menentukan jenis kursor sisi server, dan menjalankan pernyataan SQL. Data dikembalikan dalam objek SQLServerResultSet.
Selanjutnya, kode sampel memanggil metode timerTest kustom, meneruskan sebagai argumen ukuran pengambilan untuk digunakan dan tataan hasil. Metode timerTest kemudian mengatur ukuran pengambilan hasil yang ditetapkan dengan menggunakan metode setFetchSize, mengatur waktu mulai pengujian, lalu melakukan iterasi melalui tataan hasil dengan perulangan While . Segera setelah While perulangan keluar, kode mengatur waktu berhenti pengujian, dan kemudian menampilkan hasil pengujian termasuk ukuran pengambilan, jumlah baris yang diproses, dan waktu yang diperlukan untuk menjalankan pengujian.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import com.microsoft.sqlserver.jdbc.SQLServerResultSet;
public class CacheResultSet {
@SuppressWarnings("serial")
public static void main(String[] args) {
// Create a variable for the connection string.
String connectionUrl = "jdbc:sqlserver://<server>:<port>;encrypt=true;databaseName=AdventureWorks;user=<user>;password=<password>";
try (Connection con = DriverManager.getConnection(connectionUrl);
Statement stmt = con.createStatement(SQLServerResultSet.TYPE_SS_SERVER_CURSOR_FORWARD_ONLY, SQLServerResultSet.CONCUR_READ_ONLY);) {
String SQL = "SELECT * FROM Sales.SalesOrderDetail;";
for (int n : new ArrayList<Integer>() {
{
add(1);
add(10);
add(100);
add(1000);
add(0);
}
}) {
// Perform a fetch for every nth row in the result set.
try (ResultSet rs = stmt.executeQuery(SQL)) {
timerTest(n, rs);
}
}
}
// Handle any errors that may have occurred.
catch (SQLException e) {
e.printStackTrace();
}
}
private static void timerTest(int fetchSize,
ResultSet rs) throws SQLException {
// Declare the variables for tracking the row count and elapsed time.
int rowCount = 0;
long startTime = 0;
long stopTime = 0;
long runTime = 0;
// Set the fetch size then iterate through the result set to
// cache the data locally.
rs.setFetchSize(fetchSize);
startTime = System.currentTimeMillis();
while (rs.next()) {
rowCount++;
}
stopTime = System.currentTimeMillis();
runTime = stopTime - startTime;
// Display the results of the timer test.
System.out.println("FETCH SIZE: " + rs.getFetchSize());
System.out.println("ROWS PROCESSED: " + rowCount);
System.out.println("TIME TO EXECUTE: " + runTime);
System.out.println();
}
}