Clojure.contrib.sql:如何将select语句的结果检索到可以随时访问的向量中?

时间:2014-06-24 12:41:13

标签: sql clojure

例如,在此查询中:

(Clojure.contrib.sql/with-query-results rows ["SELECT count(*) from tableName"] (doseq [record rows] (println (vals record))))

似乎记录和行不在此范围之外,但我希望它随时存在以供我访问。

更新: 我尝试了以下代码行

(def asdf [])
(sql/with-connection db

(sql/with-query-results rows ["SELECT * FROM tableName"] (doseq [record rows] (def asdf (conj asdf record)))))

(println asdf)

为什么在sql语句中向行添加行时,asdf的print语句返回为空?

1 个答案:

答案 0 :(得分:2)

您似乎缺乏对Clojure基本原则的基本理解,特别是不可变数据结构。您的conj来电并未修改变量asdf - 变量不是变量。您可以执行以下操作(未经测试)

(def asdf 
    (sql/with-connection db
         (doall (sql/with-query-results rows ["SELECT * FROM tableName"]))))

将结果直接存储为asdf的值,但这可能不是您想要的。请改为熟悉Clojure's take on functional programming