2012-09-05 18 views
7

He estado rasgándome el pelo por un problema con db-spec s en clojure.java.jdbc. Me pregunto si algún comportamiento ha cambiado recientemente, porque algo casi idéntico a esto funcionó hasta hace muy poco.Falta el parámetro requerido en clojure.java.jdbc

Mi db-spec se parece a esto:

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

Y luego en el 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 

no tengo idea de lo que el NO_SOURCE_FILE es en referencia a, tampoco. Comprobé que también se puede acceder, cargar, etc. al controlador Oracle. ¿Qué parámetro podría faltar en el db-spec?

Nota: Tengo el mismo problema con MS SQL Server.

+1

usuario $ eval1116.invoke (NO_SOURCE_FILE: 1) se refiere a usted a escribir en el REPL –

Respuesta

7

La cuestión es que prod es una función, así que o cambio de prod para ser (def prod {all props here}) o llamar a la función prod cuando sea necesario: (with-connection (prod) (with-query-results

Cuestiones relacionadas