【发布时间】:2019-04-05 18:05:35
【问题描述】:
我目前正在学习使用 Clojure 和与 postgresql 的连接,但我被卡住了。在我的代码中,我可以使用java.jdbc 依赖项成功查询使用SELECT,但是当我UPDATE 或INSERT 时出现异常
我正在使用这些依赖项
[org.clojure/java.jdbc "0.7.8"]
[postgresql "9.3-1102.jdbc41"]
这是我的 SELECT-ing 工作代码,来自名为 public."user" 的表
(ns knp-api.model.user
(:require [clojure.java.jdbc :as sql]))
(def db "jdbc:postgresql://ampersanda@localhost:5432/idjoesoft_klinik")
(defn get-count [q]
"Get count key from query
It takes jdbc.query as parameter"
(:count (first (into [] q))))
(defn is-user-email-available? [e]
"Returns boolean when email is available.
Take one parameter, it's email"
(let [q "SELECT COUNT(*) FROM public.\"user\" t WHERE user_email = ?"]
(sql/query db [q e] {:result-set-fn #(= 1 (get-count %))})))
这不是我的代码导致出现异常
(defn set-user-timestamp-and-token [email token timestamp]
"update user current token and last login time inside database.
Takes email, token, and current timestamp as parameter"
(sql/update! db
"public.\"user\""
{:user_last_login (str "to_timestamp(" timestamp ")")
:user_token token}
["user_email = ?" email]))
这是个例外
更新
我也尝试使用 REPL 创建表,我也得到了相同的结果。
knp-api.handler=> (require '[clojure.java.jdbc :as sql])
nil
knp-api.handler=> (sql/db-do-commands "jdbc:postgresql://ampersanda@localhost:5432/idjoesoft_klinik" (sql/create-table-ddl :testing [[:data :text]]))
PSQLException This ResultSet is closed. org.postgresql.jdbc2.AbstractJdbc2ResultSet.checkClosed (AbstractJdbc2ResultSet.java:2852)
【问题讨论】:
-
如果结果集在关闭后使用,则会发生错误。例如,如果在自动提交模式下执行多个交错语句,就会发生这种情况。您还使用了相当旧版本的 PostgreSQL JDBC 驱动程序。
-
感谢您的回复。对 PostgreSQL JDBC 驱动程序有什么建议吗?我按照 Heroku 的这些步骤进行操作。
-
@MochamadLuckyPradana : 运气好吗?
-
@Ashwin:不幸的是,没有:(,我改用
funcool/clojure.jdbc
标签: postgresql jdbc clojure