代码之家  ›  专栏  ›  技术社区  ›  Ampersanda

Clojure JDBC-此结果集已关闭

  •  2
  • Ampersanda  · 技术社区  · 5 年前

    SELECT 使用 java.jdbc UPDATE INSERT

    我正在使用这些依赖项

    [org.clojure/java.jdbc "0.7.8"]
    [postgresql "9.3-1102.jdbc41"]
    

    这是我的工作代码 选择 -从一个名为 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]))
    

    enter image description here

    更新

    我还尝试使用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)
    
    2 回复  |  直到 5 年前
        1
  •  1
  •   Arthur Ulfeldt    5 年前

    我怀疑更新进行得很好,然后它尝试返回更改的行,并尝试作为延迟序列来执行。尝试打印/处理延迟结果序列的事情可能是在连接关闭后进行的。

    尝试在调用中包装select语句 doall

        2
  •  1
  •   Dan Markhasin    5 年前

    今天遇到了同样的问题,根本原因是postgresql java驱动程序。 postgresql "9.3-1102.jdbc41"

        3
  •  0
  •   Simon Brooke    5 年前

    我记得有这个问题,但那是很多年前的事了,我不记得解决方法了。然而,在Clojure中包装原始JDBC并不是一个好主意。有许多优秀的Clojure库,可以更轻松地使用数据库。我特别推荐 SQL Korma Hug SQL

        4
  •  0
  •   stigma    4 年前

    在花了一段时间试图解决这个问题后,我可以确认,在我的例子中,更新postgresql java驱动程序解决了这个问题,如果任何人有同样的问题,请尝试使用来自clojars/maven的最新驱动程序,clojars甚至有一条消息告诉您应该使用来自maven central的版本。