我有一个应用程序,我想为Oracle和SQL Server驱动程序定义要为连接预取的默认行数。 Oracle驱动程序有一个OracleConnection
接口,它提供setDefaultRowPrefetch
方法来执行此操作,但我找不到与SQL Server驱动程序等效的任何内容。
有一种方法可以使用SQL Server JDBC驱动程序为连接定义默认行预取吗?
答案 0 :(得分:10)
设置行获取大小的常用方法是:
java.sql.Connection
供应商实施类自定义方法(例如OracleConnection.setDefaultRowPrefetch
)java.sql.Statement.setFetchSize(int)
:向驱动程序提供有关从此ResultSets
获取的所有Statement
的行提取大小的提示。此方法由PreparedStatement
和CallableStatement
继承。大多数JDBC驱动程序都支持它。java.sql.ResultSet.setFetchSize(int)
:向驱动程序提供有关所有ResultSet
的行提取大小的提示。 MS SQL Server JDBC驱动程序不支持以下任何方式:
Statement
相同的问题。默认情况下,除非在JDBC驱动程序中指定游标类型,否则它将从数据库中检索所有行。 MSSQL驱动程序无法使用常用方法直接控制获取大小。
<强>解决方案:强>
Statement
投射至SQLServerStatement
并使用方法setMaxRows(int)
。为什么他们没有在标准方法Steve Ballmer中实现这一点只知道; ^)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 SET ROWCOUNT
或SELECT TOP N