A Clojure wrapper for JDBC-based access to databases.
Formerly known as clojure.contrib.sql.
Latest stable release: 0.2.3
Leiningen dependency information:
[org.clojure/java.jdbc "0.2.3"]
Maven dependency information:
<dependency>
<groupId>org.clojure</groupId>
<artifactId>java.jdbc</artifactId>
<version>0.2.3</version>
</dependency>
You will also need to add dependencies for the JDBC driver you intend to use. Here are examples of the drivers currently used for testing, shown as Leiningen dependencies:
;; Apache Derby
[org.apache.derby/derby "10.8.1.2"]
;; HSQLDB
[hsqldb/hsqldb "1.8.0.10"]
;; Microsoft SQL Server using the jTDS driver
[net.sourceforge.jtds/jtds "1.2.4"]
;; MySQL
[mysql/mysql-connector-java "5.1.6"]
;; PostgreSQL
[postgresql/postgresql "8.4-702.jdbc4"]
;; SQLite
[org.xerial/sqlite-jdbc "3.7.2"]
For the latest versions, consult the vendor or project websites. clojure.java.jdbc is also tested against Microsoft's own JDBC4 Driver 3.0 but that has to be downloaded manually and placed in a Maven repository accessible to your system. For testing, it was installed locally as:
;; Microsoft SQL Server JDBC4 Driver 3.0
[sqljdbc4/sqljdbc4 "3.0"]
(require '[clojure.java.jdbc :as sql])
(def mysql-db {:subprotocol "mysql"
:subname "//127.0.0.1:3306/clojure_test"
:user "clojure_test"
:password "clojure_test"})
(sql/with-connection mysql-db
(sql/insert-records :fruit
{:name "Apple" :appearance "rosy" :cost 24}
{:name "Orange" :appearance "round" :cost 49}))
(sql/with-connection mysql-db
(sql/with-query-results rows
["SELECT * FROM fruit WHERE appearance = ?" "rosy"]
(:cost (first rows))))
For more detail see the generated documentation on github.
-
Testing:
- Currently by default tests run only against Derby and HSQLDB, the in-process databases.
-
To test against PostgreSQL, first create the user and database:
$ sudo -u postgres createuser clojure_test -P # password: clojure_test $ sudo -u postgres createdb clojure_test -O clojure_test
-
Or similarly with MySQL:
$ mysql -u root mysql> create database clojure_test; mysql> grant all on clojure_test.* to clojure_test identified by "clojure_test";
-
Then run the tests with the TEST_DBS environment variable:
$ TEST_DBS=mysql,postgres mvn test
-
Release 0.2.3 on 2012-06-18
- as-str now treats a.b as two identifiers separated by . so quoting produces [a].[b] instead of [a.b]
- Add :connection-uri option JDBC-34
-
Release 0.2.2 on 2012-06-10
-
Release 0.2.1 on 2012-05-10
-
Release 0.2.0 on 2012-04-23
- Merge internal namespace into main jdbc namespace JDBC-19
-
Release 0.1.4 on 2012-04-15
- Unwrap RTE for nested transaction exceptions (we already unwrapped top-level transaction RTEs).
- Remove reflection warning unwrapping RunTimeException (Alan Malloy)
-
Release 0.1.3 on 2012-02-29
- Fix generated keys inside transactions for SQLite3 JDBC-26
-
Release 0.1.2 on 2012-02-29
- Handle prepared statement params correctly JDBC-23
- Add support for SQLite3 JDBC-26
- Replace replicate (deprecated) with repeat JDBC-27
- Ensure MS SQL Server passes tests with both Microsoft and jTDS drivers
- Build server now tests derby, hsqldb and sqlite by default
- Update README per Stuart Sierra's outline for contrib projects
-
Release 0.1.1 on 2011-11-02
-
Release 0.1.0 on 2011-10-16
- Remove dependence on deprecated structmap JDBC-15
-
Release 0.0.7 on 2011-10-11
-
Release 0.0.6 on 2011-08-04
- Improve exception handling (unwrap RTE)
- Don't use batch for update (causes exceptions on Apache Derby) JDBC-12
- Add test suite
-
Release 0.0.5 on 2011-07-18
- Expose prepare-statement API
- Allow with-query-results to accept a PreparedStatement or options for creating one, instead of SQL query string and parameters
- Support databases that cannot return generated keys
-
Release 0.0.4 on 2011-07-17
-
Release 0.0.3 on 2011-07-01
- Key generation compatibility with MS SQL Server, PostgreSQL JDBC-10
-
Release 0.0.2 on 2011-06-07
- Clojure 1.2 compatibility JDBC-7
-
Release 0.0.1 on 2011-05-07
- Initial release
-
Changes from clojure.contrib.sql:
- Expose print-... functions; no longer write exceptions to *out*
- Define resultset-seq to replace clojure.core/resultset-seq
- Add naming / quoting strategies (see name mapping documentation
- Return generated keys from insert operations, where possible
- Add insert-record function
- Clojure 1.3 compatibility
Copyright (c) Stephen Gilardi, Sean Corfield, 2011-2012. All rights reserved. The use and distribution terms for this software are covered by the Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php) which can be found in the file epl-v10.html at the root of this distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice, or any other, from this software.