2012-04-10 2 views
2
나는 아래의 코드에서와 같이 데이터베이스에 액세스하기 위해 몇 가지 Clojure의 기능을 만들었습니다

에서의 SQLException 예외를 이해 할 수 없습니다. 쿼리는 결과 집합을 반환하고 처리 할 수 ​​있습니다. 자, 만약 내가 (. 디버그 로그 행) 코멘트 :는 Clojure의

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

어떤 생각?

감사

답변

1

"행"(그것은 단지 서열 또는 어쨌든 nil 될 수 있다면 또는 단지 rows에)

(if (seq rows) 
    rows) 

게으른 :

서열 그렇지 않은 것은, 단순화 할 수있다. 그리고 그것은 "(.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 % 확실하지 않다,하지만 난 문제가 결과 서열은 게으른 것을이라고 생각하고 시간에 당신은 with-connect 이외의 것 (DB를 연결이 닫혀을 처리).

디버그 문은 연결이 아직 열려있는 동안 구현을 강제합니다.

약간의 문체 코멘트 :

당신은 문자열로 문자열을 변환하는 캐릭터 라인을 사용할 필요가 없습니다.