8

db-specclojure.java.jdbcのsの問題で髪を引き裂いてきました。これとほぼ同じものがごく最近まで機能していたので、最近いくつかの動作が変更されたのではないかと思います。

私のdb-specは次のようになります:

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

そして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 acedia.db.bbts$prod@4d24bd93 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を参照しているのかもわかりません。oracleドライバーがアクセス可能であるか、ロードされているかなども確認しました。db-specでどのパラメーターが欠落している可能性がありますか?

注:MSSQLServerでも同じ問題が発生します。

4

1 に答える 1

9

問題はそれprodが関数であるため、必要に応じて prod を変更するか(def prod {all props here})、 prod 関数を呼び出します。(with-connection (prod) (with-query-results

于 2012-09-05T19:03:09.917 に答える