【问题标题】:Using :row-fn failing in clojure.jdbc query call在 clojure.jdbc 查询调用中使用 :row-fn 失败
【发布时间】: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。

标签: jdbc clojure


【解决方案1】:

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

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

您可以了解更多信息in The Clojure Cookbook。我强烈推荐买一本!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2021-11-02
    • 2017-12-16
    • 2017-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多