【发布时间】: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]))
【问题讨论】: