sql >> Databasteknik >  >> RDS >> Sqlserver

Ställ in en standard radförhämtning i SQL Server med JDBC-drivrutinen

De vanliga sätten att ställa in radhämtningsstorlek är:

  1. Via java.sql.Connection leverantörsimplementeringsklass anpassad metod (t.ex. OracleConnection.setDefaultRowPrefetch )
  2. Via java.sql.Statement.setFetchSize(int) :ger en ledtråd till föraren om radhämtningsstorleken för alla ResultSets hämtat från detta Statement . Denna metod ärvs av PreparedStatement och CallableStatement . De flesta JDBC-drivrutiner stöder det.
  3. Via java.sql.ResultSet.setFetchSize(int) :ger en ledtråd till föraren om radhämtningsstorleken för all denna ResultSet .

MS SQL Server JDBC-drivrutinen stöder inte något av dessa sätt:

  1. MSSQL-drivrutinen har ingen sådan metod.
  2. Tyvärr, medan de flesta förare respekterar tipset, gör inte MSSQL-drivrutinen det. Så inte användbart för dig. Se Vad fungerar Statement.setFetchSize(nSize)-metoden egentligen göra i SQL Server JDBC-drivrutinen?
  3. Samma problem som Statement .

Som standard hämtar den alla raderna från databasen om du inte anger markörtyp i JDBC-drivrutinen. MSSQL-drivrutinen kan inte direkt styra hämtningsstorleken med de vanliga metoderna.

Lösningar:

  • Casta ditt Statement till SQLServerStatement och använd metoden setMaxRows(int) . Varför de inte implementerade detta inom standardmetoden Steve Ballmer bara vet;^)
  • Skapa din drivrutin med en markörtyp. Standard hämtningsstorlek för en markör är 1. Ställ in Connection strängegenskap selectMethod=cursor . Alternativt kan du skapa Statement med com.microsoft.sqlserver.jdbc.SQLServerResultSet.TYPE_SS_SERVER_CURSOR_FORWARD_ONLY rullning för framåtriktad, skrivskyddad åtkomst och använd sedan setFetchSize metod för att justera prestanda. http://technet.microsoft.com/en -us/library/aa342344%28SQL.90%29.aspx
  • Använd (proprietär) SQL för att begränsa antalet returnerade rader (inte samma sak som att ställa in hämtningsstorleken ):SET ROWCOUNT eller SELECT TOP N
  • Byt till jTDS med öppen källkod drivrutin, speciellt framtagen för att övervinna problemen med SQL Server-drivrutinen. Det är en överlägsen förare.



  1. Hur visar man data från databasen?

  2. Oracle SQL unika begränsning A till B, B till A

  3. Postgresql 9.2 pg_dump versionen matchar inte

  4. django test app-fel - Fick ett fel när testdatabasen skapades:behörighet nekades att skapa databas