前提:マシン上でClojureとMySQLの両方がすでに実行されている。
どうやって彼らに話させますか?
4 に答える
前提:マシン上でClojureとMySQLの両方がすでに実行されている。
チェックアウトしてclojureをビルドする-投稿:
git clone git://github.com/richhickey/clojure-contrib.git cd clojure-contrib build
結果のclojure-contrib.jarをCLASSPATHに配置します。
MySQL Connector / Jをダウンロードし、mysql-connector-java-5.1.7-bin.jarをCLASSPATHに配置します
次の引数を使用してJVMを実行する必要がある場合があります。
-Djdbc.drivers=com.mysql.jdbc.Driver
MySQLデータベースの接続URLを決定します
たとえば、MAMPでMySQLを実行 している場合、JDBCで使用するURLは次のようになります。
conn = DriverManager.getConnection ("jdbc:mysql://localhost:8889/db_name?user=root&password=root")
URLは次のコンポーネントに分類されます。
- プロトコル:
jdbc:
- サブプロトコル:
mysql
- db-host:
localhost
- db-port:
8889
- ユーザー名
- パスワード
- プロトコル:
このclojureスクリプトを作成し、URLに一致するようにデータベース接続パラメーターを変更し、test.cljとして保存し、コンパイルして実行します。
(use 'clojure.contrib.sql) ;;' satisfy prettify
(let [db-host "localhost"
db-port 8889
db-name "db_name"]
(def db {:classname "com.mysql.jdbc.Driver"
:subprotocol "mysql"
:subname (str "//" db-host ":" db-port "/" db-name)
:user "root"
:password "root"})
(with-connection db
(with-query-results rs ["select * from languages"]
(dorun (map #(println (:language :iso_code %)) rs)))))
; rs will be a sequence of maps,
; one for each record in the result set.
注意:このコードは、ClojureからPostgresデータベースにアクセスするためにMarkVolkmannによって作成された同様のコードから適応されました。
これは、Nurullah Akkayaによるこのブログからの多くのガイダンスによる、lein に優しい回答です。
に依存関係を追加します
project.clj
。(defproject clojql "1.0.0-SNAPSHOT" :description "FIXME: write description" :dependencies [[org.clojure/clojure "1.2.1"] [org.clojure/clojure-contrib "1.2.0"] ;; for clojure.contrib.sql [org.clojure/java.jdbc "0.0.6"] ;; jdbc [mysql/mysql-connector-java "5.1.6"]]) ;; mysql driver
コマンドラインから実行
lein deps
して依存関係を取得しますマップで接続情報を指定します。
user=> (use 'clojure.contrib.sql) nil user=> (def db {:classname "com.mysql.jdbc.Driver" :subprotocol "mysql" :subname "//localhost:3306/nmr" :user "root"})
使用
with-connection
およびwith-query-results
マクロ(およびその他) :user=> (with-connection db (with-query-results rs ["select * from sometable"] (count rs))) 667
手順 3 と 4 は、repl から (lein repl
開始するため) または通常のソース コード内で行うことができます。
2016年現在:
Leiningenを使用して、project.clj 内に依存関係を追加します。
:dependencies [[org.clojure/clojure "1.8.0"]
[org.clojure/java.jdbc "0.4.2"]
[mysql/mysql-connector-java "5.1.38"]]
名前空間定義内にデータベース コネクタが必要:
(ns name.space
(:require [clojure.java.jdbc :as j]))
データベース接続を定義します:
(def db-map {:subprotocol "mysql"
:subname "//localhost:3306/SCHEME"
:user "DB_USER"
:password "DB_USER_PASS"})
データベースにクエリを実行します。
(j/query db-map ["SELECT * FROM table"])
http://clojure-doc.org/articles/ecosystem/java_jdbc/using_sql.htmlで他の例を見つけて ください。