Clojure JDBC - This ResultSet is closed
我目前正在学习使用Clojure和与postgresql的连接,但遇到问题。 在我的代码中,我可以使用
我正在使用这些依赖项
1 2 | [org.clojure/java.jdbc"0.7.8"] [postgresql"9.3-1102.jdbc41"] |
这是我在名为
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | (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 %))}))) |
这不是我的代码使出现异常
1 2 3 4 5 6 7 8 | (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创建表,我也得到了相同的结果。
1 2 3 4 5 | 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 java驱动程序。
我怀疑更新进行得很好,然后尝试返回已更改的行,并尝试将其作为惰性序列执行。连接关闭后,尝试打印/处理延迟结果序列的操作可能正在执行此操作。
请尝试将select语句包装在对
花了一段时间尝试解决这个问题后,我可以在我的情况下确认更新postgresql java驱动程序已解决了该问题,如果有人遇到相同的问题,请尝试使用clojars / maven中的最新驱动程序,Clojars甚至会显示一条消息,告诉您您应该使用Maven Central的版本。
我记得有这个问题,但是已经有很多年了,我不记得解决方案了。但是,将原始JDBC包装在Clojure中不是一个好主意。有许多出色的Clojure库,使使用数据库变得更加容易。我特别推荐SQL Korma和Hug SQL。