检查结果集的空虚clojure jdbc
问题描述:
我使用clojure jdbc,compojure,cheshire,postgresql,c3p0,tryin使REST。当我使用此代码为处理检查结果集的空虚clojure jdbc
(defn get-document [id]
(sql/query (db-connection)
["select * from document where id = cast(? as integer)" id]
{:row-fn
(fn [first]
(if (empty? first)
(response "empty")
(response first)
))}))
如果reslutset不是空的,我有反应,因为我需要的,但如果它的空我得到了空方括号[]。
而且这是我的项目依赖
:dependencies [[org.clojure/clojure "1.8.0"]
[compojure "1.5.1"]
[ring/ring-json "0.4.0"]
[c3p0/c3p0 "0.9.1.2"]
[ring/ring-defaults "0.2.1"]
[org.clojure/java.jdbc "0.7.3"]
[org.postgresql/postgresql "42.1.4"]
[cheshire "5.8.0"]]
答
的:row-fn
功能在结果集的每一行执行。当你的结果集为空时,row-fn不会被调用。
您可能需要使用sql/query
的结果来处理查询的响应。如果没有结果,则返回空向量(这是[]
)。您可致电empty?
查询结果是否为空。像这样:
(defn get-document [id]
(let [query ["select * from document where id = cast(? as integer)" id]
rows (sql/query (db-connection) query)]
(if (empty? rows)
(response "empty")
(response (first rows)))))
+0
你应该包装sql在连接或数据库错误的情况下调用try/catch。当你只对第一条记录感兴趣的时候,你可以做一个(第一个(sql/query ....)(捕获Excepton e(log.getMesage e)nil),这样你可以得到一个记录或者得到零 –
'[]'是一个空向量。你期望得到什么(可能是'nil')?为什么'[]'返回一个问题? –
我tryna做自定义的响应,如果向量是空的,我如何知道谓词(空?)必须使用它,但它不是,我不明白我在做什么错 – Bartosso
我想我现在明白了。您期待看到响应“空”,但没有得到它。 –