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

上記の例から、入れ子になっsql/with-connectionたものは DB への新しい接続を開きますか? それとも、以前に作成されたものを使用しますか?

4

1 に答える 1

2

一般的には、clojure.contrib.sql の代わりに clojure.java.jdbc を使用することをお勧めします。なぜなら、後者は 1.2.0 より新しい clojure では動作しないはずだからです。

clojure.java.jdbcでは、バインディングを使用して、ラップされた呼び出しのdbwith-connection var内の接続のマップに接続を追加するため、2 番目のものが最初のものを上書きします。

から: 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 に答える