2012-04-10 21 views
2

にSQLException例外を理解することはできません。クエリは結果セットを返し、それを処理することができます。さて、私がコメントアウトすると(.debugログ行)私はこれを得る:は以下のスニペットに示すように、私は、データベースにアクセスするために、いくつかのClojureの関数を作成しているClojureの

java.lang.RuntimeException: java.sql.SQLException: Closed Resultset: next 

何か考えてみたいですか?

おかげ

答えて

1

「行が」怠け者です。そして、 "(.debugログ行)"が "行"を評価したようです。明示的にしてください:

(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)))))) 
+0

お返事ありがとうございます。私は怠け者の評価が理由だと思った。明らかに、(.debug)強制シーケンス評価。 – kostas

2

私は100%わからないんだけど、私は、問題が結果seqが怠惰であること、であることを推測し、時間によってあなたはwith-connect外にいる(DB接続がクローズされ、それを処理)。

デバッグステートメントは、接続がまだ開いている間に実現を強制します。

いくつかのマイナーな文体コメント:

あなたは、文字列に文字列を変換するために、STRを使用する必要はありません。

配列ではない事は、に簡素化することができるかどうザ・:(それだけでとにかく配列またはnilすることができた場合、あるいは単にrowsへ)

(if (seq rows) 
    rows) 

関連する問題