dbc-cpp
is a lightweight C++ database access library loosely following the JDBC API. It currently supports the SQLite backend. If needed, other backends can be easily supported as well.
It has the following features:
- the database connection,
- prepared statements for binding parameters to and executing queries and DML/DDL statements,
- result sets for accessing rows and columns from query results.
Development status: testing/beta.
dbc-cpp
is licenced under the MIT licence.
Be sure to pull in submodules with git clone --recursive
(see below under Building).
Build and test dbc-cpp
as follows (clang++
is the default compiler):
git clone --recursive git://github.com/mrts/dbc-cpp.git
cd dbc-cpp
make -j 4
make test
Includes are in include
and the library will be in lib
.
Add -I$(DBCCPPDIR)/include
to include path and -L$(DBCCPPDIR)/lib -ldbccpp -lsqlite3
to linker flags in your project's Makefile
.
Quick overview:
#include <dbccpp/dbccpp.h>
// call connect() with driver and file name to create the connection instance
dbc::DbConnection::connect("sqlite", "test.db");
// call instance() to access the connection instance
dbc::DbConnection& db = dbc::DbConnection::instance();
// execute DDL statements directly with the connection object
db.executeUpdate("CREATE TABLE IF NOT EXISTS person "
"(id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL)");
// use prepared statements and argument binding for DML statements
dbc::PreparedStatement::ptr insert = db.prepareStatement("INSERT INTO "
"person (name) VALUES (?)");
insert << "Ervin"; // or insert->set(1, "Ervin");
// DML statements return number of updated rows
assert(insert->executeUpdate() == 1);
// use prepared statements and argument binding for queries
dbc::PreparedStatement::ptr select = db.prepareStatement("SELECT DISTINCT "
"name FROM person WHERE name LIKE ? ORDER BY name");
select << "%vin";
// queries return result sets
dbc::ResultSet::ptr results_ptr = select->executeQuery();
dbc::ResultSet& results = *results_ptr;
// use next() to fetch and iterate over results
while (results.next())
{
// get strings by copy (recommended, rely on RVO)
std::string name = results[0];
// or into an out parameter (by reference)
results.get<std::string>(0, name);
}
See main test for more details.