sql >> Database teknologi >  >> RDS >> Sqlserver

Indstil en standardrækkeforhåndshentning i SQL Server ved hjælp af JDBC-driver

De sædvanlige måder at indstille rækkehentningsstørrelse på er:

  1. Via java.sql.Connection leverandørimplementeringsklasse brugerdefineret metode (f.eks. OracleConnection.setDefaultRowPrefetch )
  2. Via java.sql.Statement.setFetchSize(int) :giver et tip til driveren med hensyn til rækkehentningsstørrelsen for alle ResultSets hentet fra denne Statement . Denne metode er nedarvet af PreparedStatement og CallableStatement . De fleste JDBC-drivere understøtter det.
  3. Via java.sql.ResultSet.setFetchSize(int) :giver et tip til driveren med hensyn til rækkehentningsstørrelsen for alt dette ResultSets .

MS SQL Server JDBC-driveren understøtter ikke nogen af ​​disse måder:

  1. MSSQL-driveren har ikke sådan en metode.
  2. 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?
  3. 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 til SQLServerStatement og brug metoden setMaxRows(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 strengegenskab selectMethod=cursor . Alternativt kan du oprette Statement med com.microsoft.sqlserver.jdbc.SQLServerResultSet.TYPE_SS_SERVER_CURSOR_FORWARD_ONLY rulbarhed for fremadrettet, skrivebeskyttet adgang, og brug derefter setFetchSize 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 eller SELECT TOP N
  • Skift til open source jTDS driver, specielt lavet til at overvinde problemerne med SQL Server-driveren. Det er en overlegen chauffør.



  1. Hvorfor skete denne fejl, da den blev oprettet EVENT med sammensat sætning?

  2. Oprettelse af en CSV-fil pr. Loop | PLSQL Oracle SQL-udvikler

  3. kan soundex bruges på en del af en kolonne i mysql?

  4. Hvordan indstiller du autocommit i en SQL Server-session?