Jdbc 无法理解clojure中的SQLException异常
我创建了一些clojure函数来访问数据库,如下面的代码段所示:Jdbc 无法理解clojure中的SQLException异常,jdbc,clojure,Jdbc,Clojure,我创建了一些clojure函数来访问数据库,如下面的代码段所示: (defn get-dg [date] (let [query (str "......") ] (jdbc/with-connection db (jdbc/with-query-results rows [query date date date date] (.debug log rows) (if (not (seq ro
(defn get-dg [date]
(let [query (str "......")
]
(jdbc/with-connection db
(jdbc/with-query-results rows
[query date date date date]
(.debug log rows)
(if (not (seq rows))
nil
rows))))
)
一切正常。查询返回一个结果集,然后我可以对其进行处理。现在,如果我注释掉(.debug log rows),我会得到以下结果:
java.lang.RuntimeException: java.sql.SQLException: Closed Resultset: next
知道为什么吗
谢谢我不是100%确定,但我想问题是,result seq是惰性的,当您处理它时,db连接已经关闭(您在connect的
之外)
调试语句在连接仍然打开时强制实现
一些次要的文体评论:
您不必使用str将字符串转换为字符串
如果不是seq,可以简化为:
(if (seq rows)
rows)
(或者,如果它只能是一个seq或nil,甚至只对行
)“行”是懒惰的。似乎“(.debug log rows)”对“rows”进行了评估。只需明确地做到:
(defn get-dg [date]
(let [query (str "......") ]
(jdbc/with-connection db
(jdbc/with-query-results rows [query date date date date]
(comment .debug log rows)
(if (empty? rows) nil (doall rows))))))
谢谢你的回答。我怀疑懒惰的评估可能是原因。显然,(.debug)强制序列求值。