Die üblichen Methoden zum Festlegen der Zeilenabrufgröße sind:
- Über
java.sql.Connection
Anbieterimplementierungsklasse benutzerdefinierte Methode (z. B.OracleConnection.setDefaultRowPrefetch
) - Über
java.sql.Statement.setFetchSize(int)
:gibt dem Treiber einen Hinweis auf die Zeilenabrufgröße für alleResultSets
aus dieserStatement
erhalten . Diese Methode wird vonPreparedStatement
geerbt undCallableStatement
. Die meisten JDBC-Treiber unterstützen dies. - Über
java.sql.ResultSet.setFetchSize(int)
:gibt dem Treiber einen Hinweis auf die Zeilenabrufgröße für alle dieseResultSet
.
Der JDBC-Treiber von MS SQL Server unterstützt keine dieser Methoden:
- Der MSSQL-Treiber hat keine solche Methode.
- Leider respektieren die meisten Treiber den Hinweis, der MSSQL-Treiber jedoch nicht. Also nicht sinnvoll für dich. Siehe Was bedeutet Statement.setFetchSize(nSize)-Methode wirklich tun in SQL Server JDBC-Treiber?
- Gleiches Problem wie
Statement
.
Standardmäßig werden alle abgerufen die Zeilen aus der Datenbank, es sei denn, Sie geben den Cursortyp im JDBC-Treiber an. Der MSSQL-Treiber kann die Abrufgröße nicht direkt mit den üblichen Methoden steuern.
Lösungen:
- Senden Sie Ihre
Statement
zuSQLServerStatement
und verwenden Sie die MethodesetMaxRows(int)
. Warum sie dies nicht innerhalb der Standardmethode implementiert haben Steve Ballmer weiß nur;^) - Erstellen Sie Ihren Treiber mit einem Cursortyp. Die Standardabrufgröße für einen Cursor ist 1. Legen Sie die
Connection
fest String-EigenschaftselectMethod=cursor
. Alternativ können Sie dasStatement
erstellen mitcom.microsoft.sqlserver.jdbc.SQLServerResultSet.TYPE_SS_SERVER_CURSOR_FORWARD_ONLY
Scrollbarkeit für Vorwärts-, Nur-Lese-Zugriff, und verwenden Sie dannsetFetchSize
Methode zur Leistungsoptimierung. http://technet.microsoft.com/en -us/library/aa342344%28SQL.90%29.aspx - Verwenden Sie (proprietäres) SQL, um die Anzahl der zurückgegebenen Zeilen zu begrenzen (nicht dasselbe wie das Festlegen der Abrufgröße ):
SET ROWCOUNT
oderSELECT TOP N
- Wechseln Sie zu Open Source jTDS Treiber, der speziell entwickelt wurde, um die Probleme des SQL Server-Treibers zu überwinden. Es ist ein überlegener Fahrer.