Typowe sposoby ustawiania rozmiaru pobierania wiersza to:
- Przez
java.sql.Connection
klasa implementacji dostawcy metoda niestandardowa (np.OracleConnection.setDefaultRowPrefetch
) - Przez
java.sql.Statement.setFetchSize(int)
:daje wskazówkę kierowcy co do rozmiaru wiersza dla wszystkichResultSets
uzyskane z tegoStatement
. Ta metoda jest dziedziczona przezPreparedStatement
iCallableStatement
. Większość sterowników JDBC to obsługuje. - Przez
java.sql.ResultSet.setFetchSize(int)
:daje podpowiedź kierowcy co do rozmiaru wiersza dla wszystkich tychResultSet
.
Sterownik MS SQL Server JDBC nie obsługuje żadnego z tych sposobów:
- Sterownik MSSQL nie ma takiej metody.
- Niestety, podczas gdy większość sterowników przestrzega wskazówki, sterownik MSSQL nie. Więc nie jest to dla ciebie przydatne. Zobacz Co tak naprawdę robi metoda Statement.setFetchSize(nSize) zrobić w sterowniku SQL Server JDBC?
- Ten sam problem, co
Statement
.
Domyślnie pobiera wszystkie wiersze z bazy danych, chyba że określisz typ kursora w sterowniku JDBC. Sterownik MSSQL nie może bezpośrednio kontrolować rozmiaru pobierania przy użyciu zwykłych metod.
Rozwiązania:
- Prześlij swoje
Statement
doSQLServerStatement
i użyj metodysetMaxRows(int)
. Dlaczego nie wdrożyli tego w ramach standardowej metody Steve Ballmer tylko wie;^) - Utwórz sterownik z typem kursora. Domyślny rozmiar pobierania dla kursora to 1. Ustaw
Connection
właściwość ciąguselectMethod=cursor
. Alternatywnie możesz utworzyćStatement
zcom.microsoft.sqlserver.jdbc.SQLServerResultSet.TYPE_SS_SERVER_CURSOR_FORWARD_ONLY
przewijalność dla dostępu tylko do przodu, tylko do odczytu, a następnie użyjsetFetchSize
metoda dostrajania wydajności. http://technet.microsoft.com/en -us/library/aa342344%28SQL.90%29.aspx - Użyj (zastrzeżonego) SQL, aby ograniczyć liczbę zwracanych wierszy (nie to samo, co ustawianie rozmiaru pobierania ):
SET ROWCOUNT
lubSELECT TOP N
- Przełącz na open source jTDS sterownik, specjalnie stworzony w celu rozwiązania problemów ze sterownikiem SQL Server. To doskonały kierowca.