【问题标题】:Why is j/with-connection an unknown var?为什么 j/with-connection 是未知变量?
【发布时间】:2014-04-25 15:16:10
【问题描述】:

我正在为 Clojure 使用 SpringSource Informix JDBC 驱动程序。使用lein repl (load-file ...) 加载文件时出现错误这是错误:

No such var: j/with-connection

我做错了什么?

此函数返回要与查询一起使用的数据库映射(以及 core.clj 标头)

(ns ics-db.core
  (require [clojure.string :as str])
  (require [clojure.java.jdbc :as j])
  (require [util.core :as utl])
  (:use [clojure.tools.cli])
  (:use [clojure.java.shell :only [sh]])
  (:import java.util.Date)
)

(def dbg 2)

(def if_SE_engine_type "SE")

(defn retn-informix-setup
"Sets up and returns a map structure that can be used elsewhere to talk to informix/ics"
[opts]
(let [start-time  (str (Date.))
  informix-db {:classname "com.informix.jdbc.IfxDriver"
               :subprotocol "informix-sqli"
               :subname (format "//%s:%s/%s:informixserver=%s;usev5server=1;DBPATH=%s" 
               (:host opts)
               (:port opts)
               (:database opts)
               (:server opts)
               (:dbpath opts))
              }]
  informix-db))

此函数采用上面创建的数据库映射,并且选择查询工作正常。

(defn ret-sel-query
  "Performs a selection query."
  [db-info query]
  (let [result (j/query db-info
                     [query])]
    result)) 

这是包含 j/with-connection 失败的函数。此函数尝试删除刚刚查询的行:

(defn del-query
  "Performs a delete query."
  [db-info id]
  (let [result (j/with-connection db-info
                (j/delete-rows :real_estate [:acct_no id]))]))

这个测试函数测试选择和删除。如果我删除尝试删除的代码,则选择并返回所选行,并且 println 打印该行。

(if (>= (utl/chk-flagM dbg) 2)
  (do
      (defn test-1
        []
        (let [opts {:host "steamboy", 
                    :server "steamboy",
                    :database "ics",
                    :port 1498,
                    :dbpath "/home/ics/icsdev/"}

              informix-db (retn-informix-setup opts)

              sel-q "select r.* from real_estate r where r.acct_no = 70782"

              q-result (ret-sel-query informix-db sel-q)

              _  (del-query informix-db 70782)]



          (println q-result)))))

这个修改后的函数有效,但我想知道为什么with-connection 没有。

(defn del-query
  "Performs a delete query."
  [db-info id]
  (j/delete! db-info :real_estate ["acct_no = ?" id]))

【问题讨论】:

    标签: jdbc clojure


    【解决方案1】:

    clojure.java.jdbc 0.3.x 弃用了这些函数。现在可以通过命名空间clojure.java.jdbc.deprecated 访问它们。因此,要么使用该命名空间,要么转换你的代码以使用新的 API,要么返回到旧版本的库。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    • 2020-02-15
    • 1970-01-01
    • 2015-11-01
    • 2017-07-04
    • 2021-07-08
    • 1970-01-01
    相关资源
    最近更新 更多