De gebruikelijke manieren om de rij-ophaalgrootte in te stellen zijn:
- Via
java.sql.Connection
leverancier implementatieklasse aangepaste methode (bijv.OracleConnection.setDefaultRowPrefetch
) - Via
java.sql.Statement.setFetchSize(int)
:geeft een hint aan de bestuurder over de rij-ophaalgrootte voor alleResultSets
verkregen uit dezeStatement
. Deze methode is overgenomen doorPreparedStatement
enCallableStatement
. De meeste JDBC-stuurprogramma's ondersteunen het. - Via
java.sql.ResultSet.setFetchSize(int)
:geeft een hint aan de bestuurder over de rij-ophaalgrootte voor dit allesResultSet
.
MS SQL Server JDBC-stuurprogramma ondersteunt geen van deze manieren:
- MSSQL-stuurprogramma heeft zo'n methode niet.
- Helaas, terwijl de meeste stuurprogramma's de hint respecteren, doet het MSSQL-stuurprogramma dat niet. Dus niet handig voor jou. Zie Wat doet de methode Statement.setFetchSize(nSize) eigenlijk doen in SQL Server JDBC-stuurprogramma?
- Hetzelfde probleem als
Statement
.
Standaard haalt het alles . op de rijen uit de database, tenzij u het cursortype opgeeft in het JDBC-stuurprogramma. MSSQL-stuurprogramma kan de ophaalgrootte niet rechtstreeks regelen met de gebruikelijke methoden.
Oplossingen:
- Creëer je
Statement
naarSQLServerStatement
en gebruik de methodesetMaxRows(int)
. Waarom hebben ze dit niet geïmplementeerd binnen de standaardmethode Steve Ballmer weet alleen;^) - Maak uw stuurprogramma met een cursortype. De standaard ophaalgrootte voor een cursor is 1. Stel de
Connection
. in string eigenschapselectMethod=cursor
. Als alternatief kunt u deStatement
. maken metcom.microsoft.sqlserver.jdbc.SQLServerResultSet.TYPE_SS_SERVER_CURSOR_FORWARD_ONLY
schuifbaarheid voor alleen-lezen, alleen-lezen en gebruik vervolgens desetFetchSize
methode om de prestaties af te stemmen. http://technet.microsoft.com/en -us/library/aa342344%28SQL.90%29.aspx - Gebruik (eigen) SQL om het aantal geretourneerde rijen te beperken (niet hetzelfde als het instellen van de ophaalgrootte ):
SET ROWCOUNT
ofSELECT TOP N
- Overschakelen naar open source jTDS driver, speciaal gemaakt om de problemen van de SQL Server-driver te verhelpen. Het is een superieure bestuurder.