Cara yang biasa digunakan untuk menyetel ukuran pengambilan baris adalah:
- Melalui
java.sql.Connectionkelas implementasi vendor metode khusus (mis.OracleConnection.setDefaultRowPrefetch) - Melalui
java.sql.Statement.setFetchSize(int):memberikan petunjuk kepada driver tentang ukuran pengambilan baris untuk semuaResultSetsdiperoleh dariStatementini . Metode ini diwarisi olehPreparedStatementdanCallableStatement. Sebagian besar driver JDBC mendukungnya. - Melalui
java.sql.ResultSet.setFetchSize(int):memberikan petunjuk kepada pengemudi tentang ukuran pengambilan baris untuk semuaResultSet. ini .
Driver MS SQL Server JDBC tidak mendukung salah satu cara berikut:
- Driver MSSQL tidak memiliki metode seperti itu.
- Sayangnya, sementara sebagian besar driver menghormati petunjuk tersebut, driver MSSQL tidak. Jadi tidak berguna bagi Anda. Lihat Apa sebenarnya metode Statement.setFetchSize(nSize) lakukan di driver SQL Server JDBC?
- Masalah yang sama dengan
Statement.
Secara default ia mengambil semua baris dari database kecuali Anda menentukan jenis kursor di driver JDBC. Driver MSSQL tidak dapat secara langsung mengontrol ukuran pengambilan menggunakan metode biasa.
Solusi:
- Berikan
Statementyour keSQLServerStatementdan gunakan metodesetMaxRows(int). Mengapa mereka tidak menerapkan ini dalam metode standar Steve Ballmer hanya tahu;^) - Buat driver Anda dengan jenis kursor. Ukuran pengambilan default untuk kursor adalah 1. Setel
Connectionproperti stringselectMethod=cursor. Atau, Anda dapat membuatStatementdengancom.microsoft.sqlserver.jdbc.SQLServerResultSet.TYPE_SS_SERVER_CURSOR_FORWARD_ONLYscrollability untuk akses hanya-maju, akses baca-saja, dan kemudian gunakansetFetchSizemetode untuk menyetel kinerja. https://technet.microsoft.com/en -us/library/aa342344%28SQL.90%29.aspx - Gunakan SQL (eksklusif) untuk membatasi jumlah baris yang dikembalikan (tidak sama dengan menyetel ukuran pengambilan ):
SET ROWCOUNTatauSELECT TOP N - Beralih ke sumber terbuka jTDS driver, khusus dibuat untuk mengatasi masalah driver SQL Server. Ini adalah pengemudi yang unggul.