Проверить набор результатов на пустоту в clojure jdbc
Я использую clojure с jdbc, compojure, cheshire, postgresql, c3p0, пытаюсь сделать REST. Когда я использую этот код в качестве обработчика
(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"]]
1 ответ
Решение
: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)))))