1
不知道爲什麼,當我嘗試下面的代碼從Clojure的MySQL數據庫上執行一個查詢我得到這個錯誤:Clojure中使用MySQL和Java
user=> (mysql.core/list-users)
ClassNotFoundException mysql.core java.net.URLClassLoader$1.run (URLClassLoader.java:366)
這裏是我的project.clj文件
(defproject mysql "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.5.1"]
[org.clojure/java.jdbc "0.3.3"]
[mysql/mysql-connector-java "5.1.25"]
[postgresql/postgresql "8.4-702.jdbc4"]
[org.xerial/sqlite-jdbc "3.7.2"]
[java-jdbc/dsl "0.1.0"]
])
這裏是我的core.clj文件
(ns mysql.core
(:require [clojure.java.jdbc :as sql]))
(def db {:classname "com.mysql.jdbc.Driver"
:subprotocol "mysql"
:subname "//localhost:3306/dummy"
:user "idf"
:password "pwd"})
(defn list-users []
(sql/with-connection db
(sql/with-query-results rows
["select * from user"]
(println rows))))
下面是一些作品(唯一的事情是你必須得到正確DEPS機智豪特項目文件):
$ mysql -u root
mysql> create database clojure_test;
grant all on clojure_test.* to [email protected] identified by "clojure_test」;
use clojure_test;
CREATE TABLE fruit (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20), appearance VARCHAR(20), cost DECIMAL(13,2));
lein repl
user=> (require '[clojure.java.jdbc :as j])
user=> (def mysql-db {:subprotocol "mysql" :subname "//127.0.0.1:3306/clojure_test" :user "clojure_test" :password "clojure_test"})
user=> (j/insert! mysql-db :fruit {:name "Apple" :appearance "rosy" :cost 24} {:name "Orange" :appearance "round" :cost 49})
user=> (j/query mysql-db ["select * from fruit where appearance = ?" "rosy"] :row-fn :cost)
我很抱歉我對Clojure很新。你是指在獲得用戶=>提示符後運行(ns mysql.core)?另外,我不明白第2步? – Ivan
第2步意味着你需要將你的Clojure文件加載到上下文中,在你的例子中似乎運行'(load-file「src/mysql/core.clj」)'user' namespace' – llj098
你也可以使用'(使用'mysql.core)',還編輯了答案 – llj098