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

Dan*_*ira 4 java sql-server jdbc

我有一个应用程序,我想定义预取连接的默认行数,用于Oracle和SQL Server驱动程序.Oracle驱动程序有一个OracleConnection接口,它提供了setDefaultRowPrefetch执行此操作的方法,但我找不到与SQL Server驱动程序等效的任何内容.

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

Gle*_*est 11

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

  1. 通过java.sql.Connection供应商实现类自定义方法(例如OracleConnection.setDefaultRowPrefetch)
  2. Via java.sql.Statement.setFetchSize(int):向驱动程序提供有关ResultSets从此获取的所有行的获取大小的提示Statement.此方法由PreparedStatement和继承CallableStatement.大多数JDBC驱动程序都支持它
  3. Via 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.或者,您可以创建Statement具有com.microsoft.sqlserver.jdbc.SQLServerResultSet.TYPE_SS_SERVER_CURSOR_FORWARD_ONLY仅向前,只读访问权限的可滚动性,然后使用该setFetchSize方法来调整性能. http://technet.microsoft.com/en-us/library/aa342344%28SQL.90%29.aspx
  • 使用(专有)SQL来限制返回的行数(与设置提取大小不同):SET ROWCOUNTSELECT TOP N
  • 切换到开源jTDS驱动程序,专门用于克服SQL Server驱动程序的问题.这是一个优秀的驱动力.