gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 01:22:18 26 4
gpt4 key购买 nike

我有一个应用程序,我想在其中定义为连接预取的默认行数,用于 Oracle 和 SQL Server 驱动程序。 Oracle 驱动程序有一个 OracleConnection 接口(interface),它提供了 setDefaultRowPrefetch 方法来执行此操作,但我没有找到 SQL Server 驱动程序的任何等效方法。

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

最佳答案

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

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

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

  1. MSSQL 驱动程序没有这样的方法。
  2. 不幸的是,虽然大多数驱动程序都遵守该提示,但 MSSQL 驱动程序却不这样做。所以对你没用。参见 What does Statement.setFetchSize(nSize) method really do in SQL Server JDBC driver?
  3. Statement 相同的问题.

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

解决方案:

  • 投出你的StatementSQLServerStatement并使用方法 setMaxRows(int) .为什么他们没有在标准方法中实现这一点 Steve Ballmer只知道;^)
  • 用游标类型创建你的驱动程序。游标的默认提取大小为 1。设置 Connection字符串属性 selectMethod=cursor .或者,您可以创建 Statementcom.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 驱动程序的问题。这是一位出色的司机。

关于java - 使用 JDBC 驱动程序在 SQL Server 中设置默认行预取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15074037/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com