Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jdbc 无法理解clojure中的SQLException异常_Jdbc_Clojure - Fatal编程技术网

Jdbc 无法理解clojure中的SQLException异常

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

我创建了一些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 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)强制序列求值。