2012-09-05 7 views
7

clojure.java.jdbc의 db-spec과 관련된 문제로 제 머리카락을 찢어 냈습니다. 저는 최근에 어떤 행동이 바뀌 었는지 궁금합니다. 왜냐하면 최근까지도 이와 비슷한 결과가 나왔기 때문입니다.clojure.java.jdbc의 필수 매개 변수가 누락되었습니다.

내 DB-사양은 다음과 같다 다음 REPL에서 다음

(defn prod [] 
    "Yes, I've verified all of the loaded properties are accurate for the connection" 
    { :classname (get-property "acedia.bbts") 
    :subprotocol (get-property "acedia.bbts.subprotocol") 
    :subname (str "@" (get-property "acedia.bbts.dev.host") ":" (get-property "acedia.bbts.dev.port") ":" (get-property "acedia.bbts.dev.sid")) 
    :user (get-property "acedia.bbts.dev.user") 
    :password (get-property "acedia.bbts.dev.password")}) 

그리고 :

user => (prod) 
{:classname "oracle.jdbc.driver.OracleDriver", :subprotocol "oracle", :subname "@hostname:1521:bbts", :user "user", :password "pass"} 

user=> (with-connection bbts-dev (with-query-results rs ["select * from customer where rownum < 10"] (dorun (map #(println (:firstname %)) rs)))) 

user => (use 'clojure.stacktrace) 
nil 
user => (e) 
java.lang.IllegalArgumentException: db-spec [email protected] is missing a required parameter 
at clojure.java.jdbc.internal$get_connection.invoke (internal.clj:147) 
    clojure.java.jdbc.internal$with_connection_STAR_.invoke (internal.clj:154) 
    user$eval1116.invoke (NO_SOURCE_FILE:1) 
    clojure.lang.Compiler.eval (Compiler.java:6465) 
    clojure.lang.Compiler.eval (Compiler.java:6431) 
    clojure.core$eval.invoke (core.clj:2795) 
    clojure.main$repl$read_eval_print__5967.invoke (main.clj:244) 
    clojure.main$repl$fn__5972.invoke (main.clj:265) 
nil 

나도는 NO_SOURCE_FILE가 참조 무엇인지 전혀 모른다. 오라클 드라이버가 액세스 가능하고,로드되었는지 등을 확인했습니다. db-spec에서 누락 된 매개 변수는 무엇입니까?

참고 : MS SQL Server와 동일한 문제가 있습니다.

+1

사용자 $의 eval1116.invoke이 (NO_SOURCE_FILE : 1) 당신이 REPL에서 입력을 의미 –

답변

7

문제는 prod 함수, 그래서 하나의 변화 자극이 (def prod {all props here}) 일 또는 필요할 때 자극 함수를 호출하는 것입니다 : (with-connection (prod) (with-query-results

관련 문제