2016-07-12 1 views
0

Этого код работает, печатая строки в данной таблице:Использования: рядный Fn неудачи в 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" 
            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 "[email protected]"]} 

Любая идея, почему использование опции: row-fn не работает?

+0

Это, по-видимому, правильный подход в текущей версии clojure.java.jdbc. Запрос fn имеет arity of 3. – yudistrange

ответ

1

Я считаю, что фигурные скобки являются проблемой. Ваш код должен следовать следующей схеме:

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

ожно больше информации in The Clojure Cookbook. Я настоятельно рекомендую купить копию!

Смежные вопросы