Typowe sposoby ustawiania rozmiaru pobierania wiersza to:
- Przez
java.sql.Connectionklasa implementacji dostawcy metoda niestandardowa (np.OracleConnection.setDefaultRowPrefetch) - Przez
java.sql.Statement.setFetchSize(int):daje wskazówkę kierowcy co do rozmiaru wiersza dla wszystkichResultSetsuzyskane z tegoStatement. Ta metoda jest dziedziczona przezPreparedStatementiCallableStatement. 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
StatementdoSQLServerStatementi 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
Connectionwłaściwość ciąguselectMethod=cursor. Alternatywnie możesz utworzyćStatementzcom.microsoft.sqlserver.jdbc.SQLServerResultSet.TYPE_SS_SERVER_CURSOR_FORWARD_ONLYprzewijalność dla dostępu tylko do przodu, tylko do odczytu, a następnie użyjsetFetchSizemetoda dostrajania wydajności. https://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 ROWCOUNTlubSELECT 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.