3

Korma を使用して Oracle データベースに接続しようとしています。最初にこのコードを使用してみましたが、正常に接続されました。

(defdb korma-db
  {:classname "oracle.jdbc.OracleDriver"
   :subprotocol "oracle"
   :subname "thin:@my.oracle.db:1521:testdb"
   :user "xxx"
   :password "xxx"
   :naming {:keys str/lower-case :fields str/upper-case}})

しかし、もっと便利な機能があることがわかりましたkorma.db.oracle。そのため、コードは次のように単純化されました。

(defdb korma-db
  (oracle {:keys ["my.oracle.db" 1521 true]
           :as {:user "xxx" :password "xxx"}
           :naming {:keys str/lower-case :fields str/upper-case}}))

しかし、それは失敗します。しようとしましたlocalhost。関数の結果を確認すると、oracle何かおかしいことがわかりました。

{:naming {:keys #<string$lower_case clojure.string$lower_case@5ba760ac>,
 :fields #<string$upper_case clojure.string$upper_case@504f4c0b>},
 :as {:user "xxx", :password "xxx"},
 :keys ["my.oracle.db" 1521 true],
 :classname "oracle.jdbc.driver.OracleDriver",
 :subprotocol "oracle:thin",
 :subname "@localhost:1521", :make-pool? true}
            ^^^^^^^^^

Korma のソースを確認したところ、oracle関数のコードは次のとおりです。

(defn oracle
  "Create a database specification for an Oracle database. Opts should include keys
  for :user and :password. You can also optionally set host and port."
  [{:keys [host port make-pool?]
    :or {host "localhost", port 1521, make-pool? true}
    :as opts}]
  (merge {:classname "oracle.jdbc.driver.OracleDriver" ; must be in classpath
          :subprotocol "oracle:thin"
          :subname (str "@" host ":" port)
          :make-pool? make-pool?}
         opts))

要するに、私の質問は次のとおりです。

  • oracle関数の正確な使用法は何ですか? 私は何が欠けていますか?
  • 関数のコードはoracle私には奇妙に見えます。誰でもコードを説明できますか、特にパラメーター部分...[{:keys [host .... ] :or {...} :as ...}]
4

1 に答える 1

2

このoracle関数は引数を分解しますこの機能に関する記事はこちらです。

したがって、正しい呼び出し方法oracleは次のとおりです。

(defdb korma-db
  (oracle { :user "xxx"
            :password "xxx"
            :host "my.oracle.db"
            :port 1521
            :make-pool? true }))

編集: Oracle SID の指定は、次のように行うことができます。

(defdb korma-db
  (oracle {:subname "@//xxx.xxx.xxx.xxx:1521/testdb"
           :user "xxx"
           :password "xxx"
           :naming {:keys str/lower-case :fields str/upper-case}}))
于 2013-12-20T09:16:22.587 に答える