如何迭代结果集并在 clojure 中提取一个特定值?

How to iterate over a result set and extract one particular value in clojure?

下面是我尝试迭代结果集并获取其值的尝试

(sql/with-connection db 
 (sql/with-query-results rs ["select * from user where UserID=?" 10000] 
    (doseq [rec rs
        s   rec]
  (println (val s))
)))

但是你如何从中提取一个特定的值;我只需要用户名字段。

任何人都可以演示如何执行此操作吗?

结果集是一系列映射,因此如果您想获得一个字段(例如一个名为 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 将是更有效的选择。当您需要整行用于其他内容时,上面的代码很有用。

从 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 实现所有值,它不应该 return 惰性序列(因此本例中的 doall)。