DEPRECATED - Clojure JDBC utility functions
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


Clojure JDBC utility functions meant for other higher-level libraries.


On Clojars:

Leiningen dependency: [clj-jdbcutil "0.1.0"]

Everything exists in the clj-jdbcutil.core namespace.

  (:require [clj-jdbcutil.core :as ju]))

Dynamic var for database configuration keys

The dynamic var *dbspec* may be bound to a map containing well known keys and corresponding values (that users should honor):

key type default description
:datasource javax.sql.DataSource nil
:connection java.sql.Connection nil
:dbmetadata map {} use dbmeta to retrieve this value
:catalog String, Keyword etc. nil SHOULD be converted using db-iden
:schema String, Keyword etc. nil SHOULD be converted using db-iden
:read-only? boolean false true SHOULD disallow write operations
:show-sql? boolean true true SHOULD print SQL statements
:show-sql-fn function (w/ 1 arg) prints SQL using println you may rebind this to fn that sends to logger
:clj-to-db function (w/ 1 arg, returns string) converts hyphen to underscore dictates how should identifiers be converted from Clojure to the database
:db-to-clj function (w/ 1 arg, returns clj form) converts to lower-case keyword dictates how should identifiers be converted from the database to Clojure
:fetch-size Integer 1000 number of rows to fetch per DB roundtrip; helps throttle/optimize large DB reads; 0 means unlimited
:query-timeout Integer 0 number of seconds to wait for query to execute, after which timeout occurs raising SqlException (not all JDBC drivers support this so check driver manual before use)


  • Users MAY expose their own API to re-bind this var to new values.
  • Users MUST NOT alter the type/semantics of the well-defined keys.
  • Users MAY introduce custom keys with unique prefixes e.g. in order to prevent name collision.

Creating datasources

You must already have the JDBC driver in the classpath. Then you can follow either of the following to create a datasource.

(make-datasource driver-classname jdbc-url)
(make-datasource driver-classname jdbc-url username password)

Note that the API above will not create a pooling datasource, and hence may not be suitable for production use. For information on how to create pooling JDBC datasources, check out clj-dbcp


The macro with-connection can execute a body of code in the context of JDBC connection as :connection (unless already populated). This is like with the exception that you must provide :datasource in the map.

(with-connection {key1 val1 key2 val2 ...}


Copyright © 2012 Shantanu Kumar

Distributed under the Eclipse Public License, the same as Clojure.