De sædvanlige måder at indstille rækkehentningsstørrelse på er:
- Via
java.sql.Connectionleverandø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 alleResultSetshentet fra denneStatement. Denne metode er nedarvet afPreparedStatementogCallableStatement. 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
StatementtilSQLServerStatementog 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
ConnectionstrengegenskabselectMethod=cursor. Alternativt kan du opretteStatementmedcom.microsoft.sqlserver.jdbc.SQLServerResultSet.TYPE_SS_SERVER_CURSOR_FORWARD_ONLYrulbarhed for fremadrettet, skrivebeskyttet adgang, og brug dereftersetFetchSizemetode til at justere ydeevnen. https://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 ROWCOUNTellerSELECT TOP N - Skift til open source jTDS driver, specielt lavet til at overvinde problemerne med SQL Server-driveren. Det er en overlegen chauffør.