繁体   English   中英

使用:row-fn在clojure.jdbc查询调用中失败

[英]Using :row-fn failing in clojure.jdbc query call

此代码有效,打印给定表中的行:

(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选项使用失败吗?

我相信花括号是问题所在。 您的代码应遵循以下模式:

(jdbc/query db-spec 
  ["select name, cost from fruit where cost = 12"]
  :row-fn add-tax)

您可以在The Clojure Cookbook中找到更多信息。 我强烈建议购买副本!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM