1
(sql/with-connection *db-atom* (insert-data value1 value2)
 (sql/with-connection *db-atom* (read-tuple-as-map)))

从上面的示例中,嵌套是否sql/with-connection打开了与数据库的新连接?还是使用之前创建的那个?

4

1 回答 1

2

我一般建议使用 clojure.java.jdbc 而不是 clojure.contrib.sql,因为后者不应该与 1.2.0 之后的 clojure 一起使用。

在 clojure.java.jdbc 中,使用绑定将连接添加到dbwith-connection var中的连接映射以用于任何包装的调用,因此第二个将覆盖第一个。

来自:jdbc.clj

(defn with-connection*
  "Evaluates func in the context of a new connection to a database then
  closes the connection."
  [db-spec func]
  (with-open [^java.sql.Connection con (get-connection db-spec)]
    (binding [*db* (assoc *db* :connection con :level 0 :rollback (atom false))]
      (func))))
于 2012-11-12T22:33:37.147 回答