使用JDBC驱动程序在SQL Server中设置默认行预取

我有一个应用程序,我想为Oracle和SQL Server驱动程序定义要为连接预取的默认行数。 Oracle驱动程序有一个OracleConnection接口,它提供了setDefaultRowPrefetch方法来完成它,但是我找不到与SQL Server驱动程序等效的东西。

有一种方法可以使用SQL Server JDBC驱动程序为连接定义默认行预取?

设置行提取大小的常用方法是:

  1. 通过java.sql.Connection供应商实现类自定义方法 (例如OracleConnection.setDefaultRowPrefetch
  2. 通过java.sql.Statement.setFetchSize(int) :向驱动程序提供有关从此Statement获取的所有ResultSets的行提取大小的提示。 此方法由PreparedStatementCallableStatementinheritance。 大多数JDBC驱动程序都支持它
  3. 通过java.sql.ResultSet.setFetchSize(int) :向驱动程序提供有关所有此ResultSet的行提取大小的提示。

MS SQL Server JDBC驱动程序不支持以下任何方式:

  1. MSSQL驱动程序没有这样的方法。
  2. 不幸的是,虽然大多数驱动程序都尊重提示,但MSSQL驱动程序却没有。 所以对你没用。 请参阅SQL Server JDBC驱动程序中Statement.setFetchSize(nSize)方法的作用是什么?
  3. Statement相同的问题。

默认情况下,它会从数据库中检索所有行,除非您在JDBC驱动程序中指定游标类型。 MSSQL驱动程序无法使用常用方法直接控制获取大小。

解决方案:

  • 将您的StatementSQLServerStatement并使用方法setMaxRows(int) 。 为什么他们没有在标准方法中实现这一点史蒂夫鲍尔默只知道; ^)
  • 使用游标类型创建驱动程序。 游标的默认提取大小为1.设置Connection字符串属性selectMethod=cursor 。 或者,您可以使用com.microsoft.sqlserver.jdbc.SQLServerResultSet.TYPE_SS_SERVER_CURSOR_FORWARD_ONLY可滚动性创建Statement ,以进行只进,只读访问,然后使用setFetchSize方法调整性能。 http://technet.microsoft.com/en-us/library/aa342344%28SQL.90%29.aspx
  • 使用(专有)SQL来限制返回的行数( 与设置提取大小不同 ): SET ROWCOUNTSELECT TOP N
  • 切换到开源jTDS驱动程序,专门用于克服SQL Server驱动程序的问题。 这是一个优秀的驱动力。