project.clj:
---------------------------------------------------------------------------------------------------------------------------------------
(defproject testsqlite "1.0.0-SNAPSHOT"
:description "FIXME: write description"
:disable-deps-clean false
:dependencies [[org.clojure/clojure "1.3.0"]
[org.clojure/clojure-contrib "1.2.0"]
[org.clojure/java.jdbc "0.1.0"]
[org.xerial/sqlite-jdbc "3.7.2"]]
:main testsqlite.core)
core.clj:
---------------------------------------------------------------------------------------------------------------------------------------
(ns testsqlite.core
(:import [
java.io File])
(:require [clojure.java.jdbc :as sql])
(:gen-class))
(def db-name "test.db")
(def db {
:classname "org.sqlite.JDBC"
:subprotocol "sqlite" ; Protocol to use
:subname db-name ; Location of the db
})
(def new-db-conn (merge db {:create true}))
(defn create-tables
"Creates the tables needed."
[]
(sql/create-table
:members
[:id :integer "PRIMARY KEY"]
[:name "varchar(32)"]
[:age :integer]
[:programmer "tinyint"]))
(defn insert-record
[name age programmer?]
(sql/insert-values
:members
[:name
:age
:programmer]
[name
age
programmer?]))
(defn get-records
[record-fn]
(sql/with-query-results
rs
["select * from members"]
(doseq [r rs]
(record-fn r))))
(defn delete-record
[id]
(sql/delete-rows :members ["id = ?" id]))
(defn -main
[& args]
(when (not (.exists (File. db-name)))
(sql/with-connection new-db-conn
(create-tables)))
(cond (= (nth args 0) "insert")
(sql/with-connection db
(insert-record (nth args 1)
(Integer/parseInt (nth args 2))
(Integer/parseInt (nth args 3))))
(= (nth args 0) "dump")
(sql/with-connection db
(get-records println))
(= (nth args 0) "delete")
(sql/with-connection db
(delete-record (Integer/parseInt (nth args 1))))
)
)