I soliti modi per impostare la dimensione del recupero delle righe sono:
- Tramite
java.sql.Connectionclasse di implementazione del fornitore metodo personalizzato (ad es.OracleConnection.setDefaultRowPrefetch) - Tramite
java.sql.Statement.setFetchSize(int):fornisce un suggerimento al driver per quanto riguarda la dimensione del recupero della riga per tutti iResultSetsottenuto da questaStatement. Questo metodo è ereditato daPreparedStatementeCallableStatement. La maggior parte dei driver JDBC lo supporta. - Tramite
java.sql.ResultSet.setFetchSize(int):fornisce un suggerimento al conducente per quanto riguarda la dimensione del recupero della riga per tutto questoResultSet.
Il driver JDBC di MS SQL Server non supporta nessuno di questi modi:
- Il driver MSSQL non dispone di tale metodo.
- 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?
- 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
StatementaSQLServerStatemente usa il metodosetMaxRows(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
Connectionproprietà stringaselectMethod=cursor. In alternativa, puoi creare laStatementconcom.microsoft.sqlserver.jdbc.SQLServerResultSet.TYPE_SS_SERVER_CURSOR_FORWARD_ONLYscorrimento per l'accesso in sola lettura e in avanti, quindi utilizzaresetFetchSizemetodo per ottimizzare le prestazioni. https://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 ROWCOUNToSELECT TOP N - Passa all'open source jTDS driver, appositamente realizzato per superare i problemi del driver di SQL Server. È un pilota superiore.