Les méthodes habituelles pour définir la taille de récupération de ligne sont :
- Via
java.sql.Connectionclasse d'implémentation du fournisseur méthode personnalisée (par exemple,OracleConnection.setDefaultRowPrefetch) - Via
java.sql.Statement.setFetchSize(int):donne un indice au pilote quant à la taille de récupération de ligne pour tous lesResultSetsobtenu à partir de cetteStatement. Cette méthode est héritée parPreparedStatementetCallableStatement. La plupart des pilotes JDBC le prennent en charge. - Via
java.sql.ResultSet.setFetchSize(int):donne un indice au pilote quant à la taille de récupération de ligne pour tout ceResultSet.
Le pilote MS SQL Server JDBC ne prend en charge aucune de ces méthodes :
- Le pilote MSSQL n'a pas une telle méthode.
- Malheureusement, alors que la plupart des pilotes respectent l'indice, le pilote MSSQL ne le fait pas. Donc pas utile pour vous. Voir Que fait réellement la méthode Statement.setFetchSize(nSize) faire dans le pilote SQL Server JDBC ?
- Même problème que
Statement.
Par défaut, il récupère tous les lignes de la base de données, sauf si vous spécifiez le type de curseur dans le pilote JDBC. Le pilote MSSQL ne peut pas contrôler directement la taille de récupération à l'aide des méthodes habituelles.
Solution :
- Diffuser votre
StatementàSQLServerStatementet utilisez la méthodesetMaxRows(int). Pourquoi ils ne l'ont pas implémenté dans la méthode standard Steve Ballmer sait seulement;^) - Créez votre pilote avec un type de curseur. La taille de récupération par défaut pour un curseur est 1. Définissez la
Connectionpropriété de chaîneselectMethod=cursor. Alternativement, vous pouvez créer laStatementaveccom.microsoft.sqlserver.jdbc.SQLServerResultSet.TYPE_SS_SERVER_CURSOR_FORWARD_ONLYdéfilement pour un accès en avant uniquement, en lecture seule, puis utilisez lesetFetchSizeméthode pour régler les performances. https://technet.microsoft.com/en -us/library/aa342344%28SQL.90%29.aspx - Utilisez le SQL (propriétaire) pour limiter le nombre de lignes renvoyées (ce n'est pas la même chose que de définir la taille de récupération ) :
SET ROWCOUNTouSELECT TOP N - Passer à l'open source jTDS pilote, spécialement conçu pour surmonter les problèmes du pilote SQL Server. C'est un pilote supérieur.