【发布时间】:2016-07-12 23:09:05
【问题描述】:
此代码有效,打印给定表中的行:
(defn count-extreferences-subset [config]
(let [emr-dbs (:emr-databases config)]
(println "Counting external references: " emr-dbs)
(jdbc/with-db-connection [dbconn (:db-spec (first emr-dbs))]
(let [q "SELECT * FROM LOCREG"
rs (jdbc/query dbconn [q])]
(dorun (map println rs))))))
根据 clojure.jdbc 中的文档,这也应该有效,但应该在实现结果集时打印行(防止大型结果集的内存溢出):
(defn count-extreferences-subset [config]
(let [emr-dbs (:emr-databases config)]
(println "Counting external references: " emr-dbs)
(jdbc/with-db-connection [dbconn (:db-spec (first emr-dbs))]
(let [q "SELECT * FROM LOCREG"
_ (jdbc/query dbconn [q] {:row-fn println})]))))
但是,这在运行时会失败,但有以下异常:
java.lang.IllegalArgumentException: No value supplied for key: {:row-fn #object[clojure.core$println 0x46ed7a0e "clojure.core$println@46ed7a0e"]}
知道为什么使用 :row-fn 选项会失败吗?
【问题讨论】:
-
这似乎是当前 clojure.java.jdbc 版本中的正确方法。查询 fn 的元数为 3。