sql >> Database >  >> RDS >> Sqlserver

Stel een standaard rij-prefetch in SQL Server in met behulp van JDBC-stuurprogramma

De gebruikelijke manieren om de rij-ophaalgrootte in te stellen zijn:

  1. Via java.sql.Connection leverancier implementatieklasse aangepaste methode (bijv. OracleConnection.setDefaultRowPrefetch )
  2. Via java.sql.Statement.setFetchSize(int) :geeft een hint aan de bestuurder over de rij-ophaalgrootte voor alle ResultSets verkregen uit deze Statement . Deze methode is overgenomen door PreparedStatement en CallableStatement . De meeste JDBC-stuurprogramma's ondersteunen het.
  3. Via java.sql.ResultSet.setFetchSize(int) :geeft een hint aan de bestuurder over de rij-ophaalgrootte voor dit alles ResultSet .

MS SQL Server JDBC-stuurprogramma ondersteunt geen van deze manieren:

  1. MSSQL-stuurprogramma heeft zo'n methode niet.
  2. 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?
  3. 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 naar SQLServerStatement en gebruik de methode setMaxRows(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 eigenschap selectMethod=cursor . Als alternatief kunt u de Statement . maken met com.microsoft.sqlserver.jdbc.SQLServerResultSet.TYPE_SS_SERVER_CURSOR_FORWARD_ONLY schuifbaarheid voor alleen-lezen, alleen-lezen en gebruik vervolgens de setFetchSize 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 of SELECT 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.



  1. Wat is het verschil tussen het 'yy'- en 'rr'-datummasker van orakel?

  2. Haal records uit de besteltabel voor de huidige week

  3. MySQL my.ini-locatie

  4. MySQL dynamische draaitabel