Точное использование функции `oracle` в Korma и значение кода clojure?
Я пытаюсь подключиться к базе данных Oracle, используя Korma. Сначала я попытался использовать этот код и успешно подключился.
(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 ...}]
1 ответ
Решение
Это oracle
Функция деструктурирует свои аргументы. Вот статья об этой функции.
Итак, правильный способ позвонить oracle
является:
(defdb korma-db
(oracle { :user "xxx"
:password "xxx"
:host "my.oracle.db"
:port 1521
:make-pool? true }))
РЕДАКТИРОВАТЬ: указание 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}}))