Obvyklé způsoby nastavení velikosti načítání řádku jsou:
- Prostřednictvím
java.sql.Connectionvlastní metoda třídy implementace dodavatele (např.OracleConnection.setDefaultRowPrefetch) - Prostřednictvím
java.sql.Statement.setFetchSize(int):dává ovladači nápovědu ohledně velikosti načtení řádku pro všechnyResultSetszískané z tohotoStatement. Tuto metodu zdědíPreparedStatementaCallableStatement. Většina ovladačů JDBC to podporuje. - Prostřednictvím
java.sql.ResultSet.setFetchSize(int):dává ovladači nápovědu ohledně velikosti načtení řádku pro všechny tytoResultSet.
Ovladač MS SQL Server JDBC nepodporuje žádný z těchto způsobů:
- Ovladač MSSQL žádnou takovou metodu nemá.
- Zatímco většina ovladačů tuto nápovědu respektuje, ovladač MSSQL bohužel ne. Takže pro vás neužitečné. Viz Co metoda Statement.setFetchSize(nSize) skutečně znamená udělat v ovladači SQL Server JDBC?
- Stejný problém jako
Statement.
Ve výchozím nastavení načte vše řádků z databáze, pokud neurčíte typ kurzoru v ovladači JDBC. Ovladač MSSQL nemůže přímo ovládat velikost načtení pomocí obvyklých metod.
Řešení:
- Odešlete
StatementnaSQLServerStatementa použijte metodusetMaxRows(int). Proč to neimplementovali v rámci standardní metody Steve Ballmer jen ví;^) - Vytvořte ovladač s typem kurzoru. Výchozí velikost načtení pro kurzor je 1. Nastavte
Connectionstring propertyselectMethod=cursor. Případně můžete vytvořitStatementscom.microsoft.sqlserver.jdbc.SQLServerResultSet.TYPE_SS_SERVER_CURSOR_FORWARD_ONLYrolovatelnost pro přístup pouze pro dopředný přístup, pouze pro čtení a poté použijtesetFetchSizezpůsob ladění výkonu. https://technet.microsoft.com/en -us/library/aa342344%28SQL.90%29.aspx - Použijte (proprietární) SQL k omezení počtu vrácených řádků (to není totéž jako nastavení velikosti načtení ):
SET ROWCOUNTneboSELECT TOP N - Přepněte na open source jTDS ovladač, speciálně vyrobený pro překonání problémů ovladače SQL Server. Je to vynikající řidič.