小编典典

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

java

我有一个应用程序,我想在其中定义要为连接预取的默认行数,同时用于Oracle和SQL
Server驱动程序。Oracle驱动程序具有一个OracleConnection接口,该接口提供了setDefaultRowPrefetch执行该操作的方法,但是我没有找到与SQL
Server驱动程序等效的任何东西。

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


阅读 191

收藏
2020-10-16

共1个答案

小编典典

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

  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驱动程序却不这样做。因此对您没有用。请参阅Statement.setFetchSize(nSize)方法在SQL Server JDBC驱动程序中的实际作用是什么?
  3. 与相同的问题Statement

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

解决方案:

  • 投下你StatementSQLServerStatement和使用的方法setMaxRows(int)。为什么他们没有在史蒂夫·鲍尔默只知道的标准方法中实现这一点; ^)
  • 用游标类型创建驱动程序。游标的默认获取大小为1。设置Connectionstring属性selectMethod=cursor。或者,您可以创建Statement具有com.microsoft.sqlserver.jdbc.SQLServerResultSet.TYPE_SS_SERVER_CURSOR_FORWARD_ONLY滚动性的for只读和只读访问,然后使用该setFetchSize方法来调整性能。 http://technet.microsoft.com/zh-cn/library/aa342344%28SQL.90%29.aspx
  • 使用(专有)SQL限制返回的行数( 与设置访存大小不同 ):SET ROWCOUNTSELECT TOP N
  • 切换到开源 jTDS 驱动程序, 驱动程序是专为克服SQL Server驱动程序问题而设计的。这是一位出色的车手。
2020-10-16