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

Impostare una precarica di riga predefinita in SQL Server utilizzando il driver JDBC

I soliti modi per impostare la dimensione del recupero delle righe sono:

  1. Tramite java.sql.Connection classe di implementazione del fornitore metodo personalizzato (ad es. OracleConnection.setDefaultRowPrefetch )
  2. Tramite java.sql.Statement.setFetchSize(int) :fornisce un suggerimento al driver per quanto riguarda la dimensione del recupero della riga per tutti i ResultSets ottenuto da questa Statement . Questo metodo è ereditato da PreparedStatement e CallableStatement . La maggior parte dei driver JDBC lo supporta.
  3. Tramite java.sql.ResultSet.setFetchSize(int) :fornisce un suggerimento al conducente per quanto riguarda la dimensione del recupero della riga per tutto questo ResultSet .

Il driver JDBC di MS SQL Server non supporta nessuno di questi modi:

  1. Il driver MSSQL non dispone di tale metodo.
  2. Sfortunatamente, mentre la maggior parte dei driver rispetta il suggerimento, il driver MSSQL non lo fa. Quindi non è utile per te. Vedi Che cosa fa davvero il metodo Statement.setFetchSize(nSize) fare nel driver JDBC di SQL Server?
  3. Stesso problema di Statement .

Per impostazione predefinita, recupera tutto le righe dal database a meno che non si specifichi il tipo di cursore nel driver JDBC. Il driver MSSQL non può controllare direttamente la dimensione del recupero usando i metodi usuali.

Soluzioni:

  • Trasmetti la tua Statement a SQLServerStatement e usa il metodo setMaxRows(int) . Perché non l'hanno implementato all'interno del metodo standard Steve Ballmer sa solo;^)
  • Crea il tuo driver con un tipo di cursore. La dimensione di recupero predefinita per un cursore è 1. Imposta il Connection proprietà stringa selectMethod=cursor . In alternativa, puoi creare la Statement con com.microsoft.sqlserver.jdbc.SQLServerResultSet.TYPE_SS_SERVER_CURSOR_FORWARD_ONLY scorrimento per l'accesso in sola lettura e in avanti, quindi utilizzare setFetchSize metodo per ottimizzare le prestazioni. http://technet.microsoft.com/en -us/library/aa342344%28SQL.90%29.aspx
  • Utilizza SQL (proprietario) per limitare il numero di righe restituite (non è la stessa cosa che impostare la dimensione del recupero ):SET ROWCOUNT o SELECT TOP N
  • Passa all'open source jTDS driver, appositamente realizzato per superare i problemi del driver di SQL Server. È un pilota superiore.