[英]Clojure.contrib.sql: How do I retrieve the results of a select statement into a vector that can be accessed anytime?
例如,在此查询中:
(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语句返回空?
您似乎对Clojure的基本原理缺乏基本的了解,尤其是不可变的数据结构。 您的conj
调用不会修改var asdf
- var不是变量。 您可以执行以下操作(未经测试)
(def asdf
(sql/with-connection db
(doall (sql/with-query-results rows ["SELECT * FROM tableName"]))))
将结果直接存储为asdf
的值,但这可能并不是您真正想要的。 相反,请熟悉Clojure的函数式编程 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.