Tree [cdc447] master /

File Date Author Commit
doc 2014-01-05 Jan Engelhardt Jan Engelhardt [ac482c] dbi and dbd: expose DATETIME fields as a struct...
drivers 2013-11-09 Jan Engelhardt Jan Engelhardt [5cc691] build: replace archaic INCLUDES by AM_CPPFLAGS
include 2014-06-27 Jan Engelhardt Jan Engelhardt [0ecef6] build: regenerate dbi.h when changed
m4 2013-11-14 Jan Engelhardt Jan Engelhardt [a882e2] Update .gitignore
src 2014-10-28 mhoenicka mhoenicka [cdc447] dbi_conn_close(): do not return early if conn->...
.gitignore 2013-11-14 Jan Engelhardt Jan Engelhardt [a882e2] Update .gitignore
AUTHORS 2010-03-21 Markus Hoenicka Markus Hoenicka [a5b88b] added Florian
COPYING 2001-04-04 David Parker David Parker [db6e11] list_tables and list_databases now returns resu...
ChangeLog 2008-02-17 Markus Hoenicka Markus Hoenicka [595e06] make libdbi plugin-safe (mostly Rainers patches)
INSTALL 2010-09-26 Markus Hoenicka Markus Hoenicka [0a6697] reworked separate lib and doc installation once... 2013-11-09 Jan Engelhardt Jan Engelhardt [5cddaa] build: throw out ancient autotools initializati...
Makefile.w32 2003-03-28 David Parker David Parker [ea3695] moved drivers out of libdbi and into libdbi-dri...
NEWS 2013-03-12 Markus Hoenicka Markus Hoenicka [046b64] updated for 0.9.0 release
README 2013-02-03 Markus Hoenicka Markus Hoenicka [112dee] final touches before next release
README.osx 2013-02-03 Markus Hoenicka Markus Hoenicka [112dee] final touches before next release
README.win32 2013-02-03 Markus Hoenicka Markus Hoenicka [112dee] final touches before next release
TODO 2004-01-13 David Parker David Parker [147e19] for 0.7.2
UPGRADING 2013-02-03 Markus Hoenicka Markus Hoenicka [a99e0e] initial import 2014-01-24 Jan Engelhardt Jan Engelhardt [171aee] build: trim 2014-01-30 mhoenicka mhoenicka [ef3e37] reverted removal of gcc black magic 2008-02-29 Markus Hoenicka Markus Hoenicka [db165a] added pkg-config file; use CFLAGS set by the en... 2003-03-28 David Parker David Parker [ea3695] moved drivers out of libdbi and into libdbi-dri... 2002-01-28 David Porter David Porter [f34646] Minor assorted tweaks from homedir. Release soo...

Read Me

libdbi - Database Independent Abstraction Layer for C
Copyright (C) 2001-2013, David Parker, Mark Tobenkin, Markus Hoenicka.


libdbi implements a database-independent abstraction layer in C, similar to the
DBI/DBD layer in Perl. Writing one generic set of code, programmers can
leverage the power of multiple databases and multiple simultaneous database
connections by using this framework.

The plugin architecture allows for new database drivers to be easily added by a
third party with flexbile licensing. See the libdbi-drivers project
( for the drivers officially
supported by libdbi.

        *** The libdbi sources do not contain any drivers ***

The framework and the drivers have to use the same internal API
version. Starting from libdbi version 0.8.0, the major version number
(in this case 0.8) denotes the API version. Any libdbi release 0.8.x
will work with any libdbi-drivers release 0.8.x. 'x' will be
incremented independently and denotes bugfix or upgrade releases that
do not change the internal API.


Perform the regular ./configure, make, make install. See INSTALL for the
generic details of each step. See ./configure --help for more libdbi
configuration options.

If you are building libdbi on Win32, see README.win32.
If you are building libdbi on OSX, see README.osx.


 * Database-level abstraction:
   Your programs don't need to deal with the arbitrary interfaces and oddities
   of each database library. libdbi handles all the details for you, you just
   tell it what you want the database to do.
 * Modularity:
   Since database code written with libdbi is not tied to one specific database
   server, you can effortlessly switch databases or give your users the option
   to specify their own database settings.
 * Clean interface:
   With ample documentation describing libdbi and its well thought out
   object-oriented design, programming with libdbi should be less painful than
   programming with native database libraries. And you only need to learn it
   once instead of learning each database library's syntax.
 * Accommodates coder apathy:
   libdbi is written to do The Right Thing(tm), not just some quick hack that
   does the job in a half-assed fashion. This saves tons of your $100/hour time
   from debugging, so that you can mess around having fun during the hours that
   clients are paying you to debug.  It also strives to reduce the worldwide
   crisis of carpal tunnel syndrome, so it uses constructs such as this one to
   pack multiple function calls into one line, saving you the bother of typing
   more than you have to: 
   dbi_result_get_fields(result, "id.%i firstname.%s lastname.%s fractional_value.%f", &id, &firstname, &lastname, &floatval);
 * Plugin interface:
   The dynamic linking used by libdbi allows for driver authors to license
   their drivers however they please - they are not restricted to the GPL or
   LGPL. Drivers are easy to write, and require no special installation.
 * Error handling:
   Instead of checking every single database call for errors, libdbi gives
   programmers the option of registering an error handler callback, similar to
   a signal handler. Because we know you'll "forget" to check for errors
   otherwise :)
 * Convenience:
   Spend your time writing clever code, not reinventing the wheel with your own
   single-use, #define-abusing, less featureful database interface.


libdbi has been written with cross-platform availability in mind. To date, it
has been successfully tested with:

Linux: Debian, RedHat/Fedora Core, Slackware, Gentoo
Windows: 98, NT4, 2000, XP
FreeBSD: 4.3 through 9.0
SunOS: 2.8
Solaris: 7, 10
AIX: 4.2, 4.3 and 5.1
OS X: 10.2-10.4.9

If you are using libdbi on a platform not listed here, please notify the
mailing list! (see below)


This library is free software; you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License as published by the Free
Software Foundation; either version 2 of the License, or (at your option) any
later version.

This library is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more

See the file COPYING or for more details.


If you want to write programs that use libdbi to access database
engines, please see the Libdbi Programmer's Guide in the doc/
directory. It is provided in PDF and HTML formats. This API reference
also includes example source code and a quickstart guide to using

If you want to write a driver for a database engine not yet supported
by libdbi, please see the Driver's Guide in the doc/ directory.


 * libdbi-users:
   Go here if you have any general questions, ideas, or problems with using
   libdbi in your program.
 * libdbi-devel:
   Discussion about development of the core library and DBD interface.

 * libdbi-cvs:
   Automated CVS diffs and log entries are sent to this address. Subscribe
   here if you want to track libdbi's progress at the source-code level.

Markus Hoenicka <>
David A. Parker <>
Mark M. Tobenkin <>

$Id: README,v 1.17 2013/02/03 22:38:31 mhoenicka Exp $