Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Définir une prélecture de ligne par défaut dans SQL Server à l'aide du pilote JDBC

Les méthodes habituelles pour définir la taille de récupération de ligne sont :

  1. Via java.sql.Connection classe d'implémentation du fournisseur méthode personnalisée (par exemple, OracleConnection.setDefaultRowPrefetch )
  2. Via java.sql.Statement.setFetchSize(int) :donne un indice au pilote quant à la taille de récupération de ligne pour tous les ResultSets obtenu à partir de cette Statement . Cette méthode est héritée par PreparedStatement et CallableStatement . La plupart des pilotes JDBC le prennent en charge.
  3. Via java.sql.ResultSet.setFetchSize(int) :donne un indice au pilote quant à la taille de récupération de ligne pour tout ce ResultSet .

Le pilote MS SQL Server JDBC ne prend en charge aucune de ces méthodes :

  1. Le pilote MSSQL n'a pas une telle méthode.
  2. 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 ?
  3. 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éthode setMaxRows(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îne selectMethod=cursor . Alternativement, vous pouvez créer la Statement avec com.microsoft.sqlserver.jdbc.SQLServerResultSet.TYPE_SS_SERVER_CURSOR_FORWARD_ONLY défilement pour un accès en avant uniquement, en lecture seule, puis utilisez le setFetchSize 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 ou SELECT 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.