下面是我尝试迭代结果集并获取其值
(sql/with-connection db
(sql/with-query-results rs ["select * from user where UserID=?" 10000]
(doseq [rec rs
s rec]
(println (val s))
)))
但是你如何从中提取一个特定的值;我只需要用户名字段。
任何人都可以请证明如何做到这一点吗?
答案 0 :(得分:3)
结果集是一系列地图,因此如果您想获得一个字段(例如一个名为name
),那么:
(sql/with-connection db
(sql/with-query-results rs ["select * from user where UserID=?" 10000]
(doseq [rec rs]
(let [name (:name rec)]
(println "User name:" name)
(println "Full record (including name):" rec)))))
但正如评论中所提到的,如果你只想要名字,那么select name from
将是更有效的选择。当您需要完整的其他内容时,上面的代码非常有用。
答案 1 :(得分:1)
从clojure.java.jdbc 3.0开始,with-connection
/ with-query-results
语法为deprecated。使用新的query
语法以及其他:row-fn
和:result-set-fn
参数,可以更轻松地过滤结果。
(query db ["select * from user"]
:row-fn :name
:result-set-fn #(doall (take 1000 (drop 10000 %))))
一定要让result-set-fn实现所有值,它不应该返回一个惰性序列(因此在这个例子中是doall
)。