我想使用clojure.java.jdbc来运行一些sql查询。 repl给了我CompilerException java.lang.RuntimeException:没有这样的命名空间:jdbc
代码和例外是
(require `[clojure.java.jdbc :as jdbc])
(def db-spec {:classname "com.mysql.jdbc.Driver" :subprotocol "mysql" :subname "//localhost:3306/foo" :user "root" :password "1234"})
(jdbc/query db-spec ["select * from client"])
=> nil
=> #'gaga.core/db-spec
CompilerException java.lang.RuntimeException: No such namespace: jdbc, compiling: (C:\Users\User\.IdeaIC14\system\tmp\form-init1177514063701175563.clj:3:1)
在我看来,require函数中的别名定义不起作用。如果我使用全名clojure.java.jdbc替换上面代码中的jdbc别名,一切似乎都有效:
(require `[clojure.java.jdbc :as jdbc])
(def db-spec {:classname "com.mysql.jdbc.Driver" :subprotocol "mysql" :subname "//localhost:3306/foo" :user "root" :password "1234"})
(clojure.java.jdbc/query db-spec ["select * from client"])
=> nil
=> #'gaga.core/db-spec
=> ({:birthday #inst "1990-09-08T14:00:00.000-00:00", :gender 0, :addressid 1, :mobile "13890879283", :idnum "31090818790987", :idtype 0, :name "xiaomao", :version 0, :id 1})
我的project.cli位于
之下(defproject gaga "0.1.0-SNAPSHOT"
:description "FIXME: write description"
:url "http://example.com/FIXME"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:dependencies [[org.clojure/clojure "1.6.0"] [org.clojure/java.jdbc "0.3.6"] [mysql/mysql-connector-java "5.1.35"]]
:main ^:skip-aot gaga.core
:target-path "target/%s"
:profiles {:uberjar {:aot :all}})
任何人都知道原因吗?
答案 0 :(得分:2)
所以基本上我测试了它在require中的语法错误 你必须使用
(require '[clojure.java.jdbc :as jdbc])
表示使用'(撇号)代替`(急性)