De sædvanlige måder at indstille rækkehentningsstørrelse på er:
- Via
java.sql.Connection
leverandørimplementeringsklasse brugerdefineret metode (f.eks.OracleConnection.setDefaultRowPrefetch
) - Via
java.sql.Statement.setFetchSize(int)
:giver et tip til driveren med hensyn til rækkehentningsstørrelsen for alleResultSets
hentet fra denneStatement
. Denne metode er nedarvet afPreparedStatement
ogCallableStatement
. De fleste JDBC-drivere understøtter det. - Via
java.sql.ResultSet.setFetchSize(int)
:giver et tip til driveren med hensyn til rækkehentningsstørrelsen for alt detteResultSets
.
MS SQL Server JDBC-driveren understøtter ikke nogen af disse måder:
- MSSQL-driveren har ikke sådan en metode.
- Desværre, mens de fleste drivere respekterer tippet, gør MSSQL-driveren det ikke. Så ikke brugbart for dig. Se Hvad betyder Statement.setFetchSize(nSize)-metoden egentlig gøre i SQL Server JDBC-driver?
- Samme problem som
Statement
.
Som standard henter den alle rækkerne fra databasen, medmindre du angiver markørtype i JDBC-driveren. MSSQL-driveren kan ikke direkte styre hentestørrelsen ved hjælp af de sædvanlige metoder.
Løsninger:
- Cast din
Statement
tilSQLServerStatement
og brug metodensetMaxRows(int)
. Hvorfor implementerede de ikke dette inden for standardmetoden Steve Ballmer ved kun;^) - Opret din driver med en markørtype. Standard-hentningsstørrelsen for en markør er 1. Indstil
Connection
strengegenskabselectMethod=cursor
. Alternativt kan du opretteStatement
medcom.microsoft.sqlserver.jdbc.SQLServerResultSet.TYPE_SS_SERVER_CURSOR_FORWARD_ONLY
rulbarhed for fremadrettet, skrivebeskyttet adgang, og brug dereftersetFetchSize
metode til at justere ydeevnen. http://technet.microsoft.com/en -us/library/aa342344%28SQL.90%29.aspx - Brug (proprietær) SQL til at begrænse antallet af returnerede rækker (ikke det samme som at indstille hentestørrelsen ):
SET ROWCOUNT
ellerSELECT TOP N
- Skift til open source jTDS driver, specielt lavet til at overvinde problemerne med SQL Server-driveren. Det er en overlegen chauffør.