Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Legen Sie mithilfe des JDBC-Treibers einen standardmäßigen Zeilenvorabruf in SQL Server fest

Die üblichen Methoden zum Festlegen der Zeilenabrufgröße sind:

  1. Über java.sql.Connection Anbieterimplementierungsklasse benutzerdefinierte Methode (z. B. OracleConnection.setDefaultRowPrefetch )
  2. Über java.sql.Statement.setFetchSize(int) :gibt dem Treiber einen Hinweis auf die Zeilenabrufgröße für alle ResultSets aus dieser Statement erhalten . Diese Methode wird von PreparedStatement geerbt und CallableStatement . Die meisten JDBC-Treiber unterstützen dies.
  3. Über java.sql.ResultSet.setFetchSize(int) :gibt dem Treiber einen Hinweis auf die Zeilenabrufgröße für alle diese ResultSet .

Der JDBC-Treiber von MS SQL Server unterstützt keine dieser Methoden:

  1. Der MSSQL-Treiber hat keine solche Methode.
  2. Leider respektieren die meisten Treiber den Hinweis, der MSSQL-Treiber jedoch nicht. Also nicht sinnvoll für dich. Siehe Was bedeutet Statement.setFetchSize(nSize)-Methode wirklich tun in SQL Server JDBC-Treiber?
  3. Gleiches Problem wie Statement .

Standardmäßig werden alle abgerufen die Zeilen aus der Datenbank, es sei denn, Sie geben den Cursortyp im JDBC-Treiber an. Der MSSQL-Treiber kann die Abrufgröße nicht direkt mit den üblichen Methoden steuern.

Lösungen:

  • Senden Sie Ihre Statement zu SQLServerStatement und verwenden Sie die Methode setMaxRows(int) . Warum sie dies nicht innerhalb der Standardmethode implementiert haben Steve Ballmer weiß nur;^)
  • Erstellen Sie Ihren Treiber mit einem Cursortyp. Die Standardabrufgröße für einen Cursor ist 1. Legen Sie die Connection fest String-Eigenschaft selectMethod=cursor . Alternativ können Sie das Statement erstellen mit com.microsoft.sqlserver.jdbc.SQLServerResultSet.TYPE_SS_SERVER_CURSOR_FORWARD_ONLY Scrollbarkeit für Vorwärts-, Nur-Lese-Zugriff, und verwenden Sie dann setFetchSize Methode zur Leistungsoptimierung. http://technet.microsoft.com/en -us/library/aa342344%28SQL.90%29.aspx
  • Verwenden Sie (proprietäres) SQL, um die Anzahl der zurückgegebenen Zeilen zu begrenzen (nicht dasselbe wie das Festlegen der Abrufgröße ):SET ROWCOUNT oder SELECT TOP N
  • Wechseln Sie zu Open Source jTDS Treiber, der speziell entwickelt wurde, um die Probleme des SQL Server-Treibers zu überwinden. Es ist ein überlegener Fahrer.