De gebruikelijke manieren om de rij-ophaalgrootte in te stellen zijn:
- Via
java.sql.Connectionleverancier implementatieklasse aangepaste methode (bijv.OracleConnection.setDefaultRowPrefetch) - Via
java.sql.Statement.setFetchSize(int):geeft een hint aan de bestuurder over de rij-ophaalgrootte voor alleResultSetsverkregen uit dezeStatement. Deze methode is overgenomen doorPreparedStatementenCallableStatement. 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
StatementnaarSQLServerStatementen 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_ONLYschuifbaarheid voor alleen-lezen, alleen-lezen en gebruik vervolgens desetFetchSizemethode om de prestaties af te stemmen. https://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 ROWCOUNTofSELECT 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.