(defvar *connection*
(dbi:connect :mysql
:database-name "test"
:username "nobody"
:password "1234"))
(let ((query (dbi:prepare *connection*
"SELECT * FROM somewhere WHERE flag = ? OR updated_at > ?"))
(result (dbi:execute query 0 "2011-11-01")))
(loop for row = (dbi:fetch result)
while row
;; process "row".
))
CL-DBI is intended to provide the same interface for each database.
Not only, you don't have to learn each API of databases anymore, but this layer is especially convenient when you want to use the different database by environment.
For example, your application had better to use efficient database such as MySQL on the production environment, but you may want to use SQLite3 on your machine. In that case, all what you have to do is only to rewrite calling dbi:connect
.
- SQLite3
- PostgreSQL
- MySQL
This library will be available on Quicklisp when ready to use.
- connect [driver-name & params] => <dbi-connection>
- disconnect [<dbi-connection>] => T or NIL
- prepare [conn sql] => <dbi-query>
- execute [query & params] => something
- fetch [result] => a row data as plist
- fetch-all [result] => a list of all row data
- do-sql [conn sql & params]
- list-all-drivers [] => (<dbi-driver> ..)
- find-driver [driver-name] => <dbi-driver>
- with-transaction [conn]
- begin-transaction [conn]
- commit [conn]
- rollback [conn]
- <dbi-driver>
- <dbi-connection>
- make-connection [driver params]
- disconnect [<dbi-connection>] => T or NIL
- prepare [conn sql] => <dbi-query>
- fetch-using-connection [conn result] => a row data as plist
- do-sql [conn sql & params]
- execute-using-connection => something
- escape-sql => string
- begin-transaction [conn]
- commit [conn]
- rollback [conn]
Create a subclass of <dbi-driver> and implement following methods.
- make-connection
- disconnect [<dbi-connection>] => T or NIL
- execute-using-connection
And these methods may be overrided if needed.
- prepare
- fetch-using-connection
- do-sql
- escape-sql
- cl-annot
- CL-Syntax
- SPLIT-SEQUENCE
- closer-mop
- Eitarow Fukamachi ([email protected])
Copyright (c) 2011 Eitarow Fukamachi ([email protected])
Licensed under the LLGPL License.