首页 > 解决方案 > SetHoldability 已启用,但 MSSQL-DRIVER 抱怨它不是

问题描述

我有一个 clojure 代码,我在其中访问 MSSQL 数据库,然后此代码执行一些选择语句以从数据库中检索一些数据。

设置连接时,我按照建议设置了“setHoldability”:

(defmethod connection-with-timezone :sql-jdbc
  [driver database ^String timezone-id]
  (let [conn (.getConnection (datasource database))]
    (try
      (set-best-transaction-level! driver conn)
      (set-time-zone-if-supported! driver conn timezone-id)
      (try
        (.setReadOnly conn true)
        (catch Throwable e
          (log/debug e (trs "Error setting connection to read-only"))))
      (try
        (.setHoldability conn ResultSet/CLOSE_CURSORS_AT_COMMIT)
        (catch Throwable e
          (log/debug e (trs "Error setting default holdability for connection"))))
      conn
      (catch Throwable e
        (.close conn)
        (throw e)))))

但是在运行代码时,该语句失败并显示:“SQL Server 仅支持连接级别的可保持性。使用 connection.setHoldability() 方法。”

例外:

2021-03-24T09:59:33.581555081Z com.microsoft.sqlserver.jdbc.SQLServerException: SQL Server supports holdability at the connection level only. Use the connection.setHoldability() method.

问题是,可保持性已经在连接中设置,如上所示。我用来访问数据库的凭据是只读的,但无论哪种方式,这些语句都只是选择语句,所以它不应该相关。

任何想法为什么会发生这种情况?

标签: javasql-serverclojuremetabase

解决方案


推荐阅读