Obvyklé způsoby nastavení velikosti načítání řádku jsou:
- Prostřednictvím
java.sql.Connection
vlastní 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šechnyResultSets
získané z tohotoStatement
. Tuto metodu zdědíPreparedStatement
aCallableStatement
. 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
Statement
naSQLServerStatement
a 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
Connection
string propertyselectMethod=cursor
. Případně můžete vytvořitStatement
scom.microsoft.sqlserver.jdbc.SQLServerResultSet.TYPE_SS_SERVER_CURSOR_FORWARD_ONLY
rolovatelnost pro přístup pouze pro dopředný přístup, pouze pro čtení a poté použijtesetFetchSize
způsob ladění výkonu. http://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 ROWCOUNT
neboSELECT 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č.