LoginSignup
4
3

More than 5 years have passed since last update.

clojure.java.jdbcでデータベースに接続する

Posted at

clojure.java.jdbc とは

clojure.java.jdbcは名前の通り、JDBCをclojureから使いやすくするためのライブラリです。
がんばってごりごり書かなければならないところを隠ぺいしてくれます。

Install

leiningenを使用しているならば:dependencies[org.clojure/java.jdbc "0.3.6"]追加するだけです。

project.clj
(defproject sample-project "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"]])

Example

requireしてdb-specを書きます。
db-specはコネクションを作成するためのものでいろいろな書き方ができます(後述)

(ns clojurejdbcsample.core
  (:require [clojure.java.jdbc :as sql]))

(def db-spec {:subprotocol "sqlite"
              :subname "target/test_db.sqlite"})

DMLのサンプル

(defn sample-dml []
  ;; 次のINSERT文と同じ意味合い
  ;; INSERT INTO languages VALUES
  ;; (1 ,"clojure"),
  ;; (2 ,"scala"),
  ;; (3 ,"ruby);
  (sql/insert! db-spec :languages nil
               [1 "clojure"]
               [2 "scala"]
               [3 "ruby"])

  ;; 次のDELETE文と同じ意味合い
  ;; DELETE FROM languages WHERE langid = 1;
  (sql/delete! db-spec :languages ["langid = ?" 1])

  ;; 次のUPDATE文と同じ意味合い
  ;; UPDATE languages SET
  ;; name = "RUBY"
  ;; WHERE langid = 3
  (sql/update! db-spec :languages {:name "RUBY"} ["langid = ?" 3])

  ;; SELECT結果はmapのvectorとして返る
  (sql/query db-spec
             ["SELECT * FROM languages WHERE langid = ?" 2])
  ;; => [{:langid 2 :name "scala"}]
  )

db-specの書き方

以下が参考になります
http://clojure.github.io/java.jdbc/#clojure.java.jdbc/get-connection
https://github.com/clojure/java.jdbc/blob/master/src/test/clojure/clojure/java/test_jdbc.clj

Oracleにつなぐ場合の注意点

OracleのJdbcドライバにはリポジトリがないため、ローカルのMavenリポジトリを作る、:resource-pathに追加する実行時にクラスパスに追加する
等の対策が必要。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3