Skip to content
forked from mrts/dbc-cpp

Lightweight database access library for C++ with JDBC-like ResultSet interface. Only SQLite driver implemented for now.

License

Notifications You must be signed in to change notification settings

Liuskur/dbc-cpp

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

37 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

dbc-cpp: a lightweight database access library for C++

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).

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.

Usage

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.

About

Lightweight database access library for C++ with JDBC-like ResultSet interface. Only SQLite driver implemented for now.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 100.0%