30

前提:マシン上でClojureとMySQLの両方がすでに実行されている。
どうやって彼らに話させますか?

4

4 に答える 4

29

前提:マシン上でClojureとMySQLの両方がすでに実行されている。

  1. チェックアウトしてclojureをビルドする-投稿:

    git clone git://github.com/richhickey/clojure-contrib.git
    cd clojure-contrib
    build
    

    結果のclojure-contrib.jarCLASSPATHに配置します。

  2. MySQL Connector / Jをダウンロードし、mysql-connector-java-5.1.7-bin.jarCLASSPATHに配置します

    次の引数を使用してJVMを実行する必要がある場合があります。

    -Djdbc.drivers=com.mysql.jdbc.Driver
    
  3. 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
    • ユーザー名
    • パスワード
  4. この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によって作成された同様のコードから適応されました。

于 2009-03-05T08:07:38.810 に答える
15

これは、Nurullah Akkayaによるこのブログからの多くのガイダンスによる、lein に優しい回答です。

  1. に依存関係を追加します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
    
  2. コマンドラインから実行lein depsして依存関係を取得します

  3. マップで接続情報を指定します。

    user=> (use 'clojure.contrib.sql)
    nil
    user=> (def db {:classname "com.mysql.jdbc.Driver" 
                    :subprotocol "mysql" 
                    :subname "//localhost:3306/nmr" 
                    :user "root"})
    
  4. 使用with-connectionおよびwith-query-resultsマクロ(およびその他) :

    user=> (with-connection db (with-query-results rs ["select * from sometable"] (count rs)))
    667
    

手順 3 と 4 は、repl から (lein repl開始するため) または通常のソース コード内で行うことができます。

于 2012-04-18T20:19:17.047 に答える
8

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で他の例を見つけて ください。

于 2016-02-10T13:55:16.840 に答える