Les méthodes habituelles pour définir la taille de récupération de ligne sont :
- Via
java.sql.Connection
classe 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 lesResultSets
obtenu à partir de cetteStatement
. Cette méthode est héritée parPreparedStatement
etCallableStatement
. 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
àSQLServerStatement
et 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
Connection
propriété de chaîneselectMethod=cursor
. Alternativement, vous pouvez créer laStatement
aveccom.microsoft.sqlserver.jdbc.SQLServerResultSet.TYPE_SS_SERVER_CURSOR_FORWARD_ONLY
défilement pour un accès en avant uniquement, en lecture seule, puis utilisez lesetFetchSize
méthode pour régler les performances. http://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 ROWCOUNT
ouSELECT 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.