Die üblichen Methoden zum Festlegen der Zeilenabrufgröße sind:
- Über
java.sql.ConnectionAnbieterimplementierungsklasse benutzerdefinierte Methode (z. B.OracleConnection.setDefaultRowPrefetch) - Über
java.sql.Statement.setFetchSize(int):gibt dem Treiber einen Hinweis auf die Zeilenabrufgröße für alleResultSetsaus dieserStatementerhalten . Diese Methode wird vonPreparedStatementgeerbt 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
StatementzuSQLServerStatementund 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
Connectionfest String-EigenschaftselectMethod=cursor. Alternativ können Sie dasStatementerstellen mitcom.microsoft.sqlserver.jdbc.SQLServerResultSet.TYPE_SS_SERVER_CURSOR_FORWARD_ONLYScrollbarkeit für Vorwärts-, Nur-Lese-Zugriff, und verwenden Sie dannsetFetchSizeMethode zur Leistungsoptimierung. https://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 ROWCOUNToderSELECT 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.