2012-09-05 13 views
7

Mi sono strappato i capelli per un problema con db-spec s in clojure.java.jdbc. Mi chiedo se qualche comportamento è cambiato di recente, perché qualcosa di quasi identico a questo ha funzionato fino a poco tempo fa.Parametro richiesto mancante in clojure.java.jdbc

mio db-spec assomiglia a questo:

(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")}) 

E poi alla REPL:

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 

Non ho idea di quello che il NO_SOURCE_FILE è in riferimento a, neanche. Ho verificato che il driver oracle è accessibile, caricato, ecc. Quale parametro potrei mancare nel db-spec?

Nota: ho lo stesso problema con MS SQL Server.

+1

utente $ eval1116.invoke (NO_SOURCE_FILE: 1) si riferisce a voi scrivendo al REPL –

risposta

7

Il problema è che prod è una funzione, quindi o il cambiamento prod di essere (def prod {all props here}) o chiamare la funzione prod quando necessario: (with-connection (prod) (with-query-results

Problemi correlati