Important Notice: ElephantSQL is shutting down. Read all about it in our End of Life Announcement

After you have setup your clojure project, change the project.clj file to look something like the example. Note the jdbc and postgresql dependencies.

(defproject elephantsql-test "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.2.3"]
                 [postgresql "9.2-902.jdbc4"]])

When you have added the dependencies you can now interact with the database the following way:

ns elephantsql-test.db
  (:import com.mchange.v2.c3p0.ComboPooledDataSource)
  (:import java.net.URI)
  (:import java.util.UUID)
  (:require '[clojure.java.jdbc :as sql]
            '[clojure.string :as string])

(def url (get (System/getenv) "ELEPHANTSQL_URL"
              "postgres://localhost/contacts"))

(defn pool [url]
  (let [uri (java.net.URI. url)
        host (.getHost uri)
        port (if (pos? (.getPort uri)) (.getPort uri) 5432)
        path (.getPath uri)
        user-info (or (.getUserInfo uri) ":")
        [user password] (clojure.string/split user-info #":")]
    {:datasource
    (doto (com.mchange.v2.c3p0.ComboPooledDataSource.)
      (.setDriverClass "org.postgresql.Driver")
      (.setJdbcUrl (str "jdbc:postgresql://" host ":" port path))
      (.setInitialPoolSize 3)
      (.setMaxPoolSize 10)
      (.setUser user)
      (.setPassword password))}))

(def pooled-db (delay (pool url)))

(defn contacts []
  (sql/with-connection @pooled-db
    (sql/with-query-results results
      ["SELECT * FROM people"]
      (into [] results))))