Sébastien Rombauts 9c2544ef16 Added a reference counter to the SQLite Statement Object handle
- manages its lifespan (tracks ownerchip) across the copy to a Column object
2012-04-16 14:39:51 +02:00
2012-04-10 21:53:42 +02:00
2012-03-31 13:21:46 +02:00
2012-04-02 20:58:41 +02:00
2012-04-10 22:48:09 +02:00
2012-03-31 13:21:46 +02:00
2012-04-10 22:48:09 +02:00

SQLiteC++

SQLiteC++ is a smart and easy to use C++ SQLite3 wrapper.

See SQLiteC++ website http://srombauts.github.com/SQLiteCpp on GitHub.

License

Copyright (c) 2012 Sébastien Rombauts (sebastien.rombauts@gmail.com)

Distributed under the MIT License (MIT) (See accompanying file LICENSE.txt or copy at http://opensource.org/licenses/MIT)

The goals of SQLiteC++ are:

  • to offer the best of existing simple wrappers
  • to use a permissive license like MIT or BSD
  • to be elegantly written with good C++ design, STL, exceptions and RAII idiom
  • to keep dependencies to a minimum (STL and SQLite3)
  • to be well documented, in code with Doxygen, and online with some good examples
  • to be portable
  • to be light and fast
  • to be monothreaded
  • to use API names sticking with those of the SQLite library
  • to be well maintained

It is designed with the Resource Acquisition Is Initialization (RAII) idom (see http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization), and throw exceptions in case of SQLite errors. Each SQLiteC++ object must be constructed with a valid SQLite database connection, and then is always valid until destroyed.

Depandancies:

  • a STL implementation (even an old one like VC6/eVC4 should work)
  • exception support (the class Exception inherite from std::runtime_error)
  • the SQLite library, either by linking to it dynamicaly or staticaly, or by adding its source file in your project code base.

To use it in your project, you only need to add the 6 SQLiteC++ source files in your project code base (not the main.cpp example file).

Getting started

About SQLite:

SQLite is a library that implements a serverless transactional SQL database engine. http://www.sqlite.org/about.html

First sample demonstrates how to query a database and get results:

try
{
    // Open a database file
    SQLite::Database    db("example.db3");
    
    // Compile a SQL query, containing one parameter (index 1)
    SQLite::Statement   query(db, "SELECT * FROM test WHERE size > ?");
    
    // Bind the integer value 6 to the first parameter of the SQL query
    query.bind(1, 6);
    
    // Loop to execute the query step by step, to get rows of result
    while (query.executeStep())
    {
        // Demonstrate how to get some typed column value
        int         id      = query.getColumn(0);
        const char* value   = query.getColumn(1);
        int         size    = query.getColumn(2);
        
        std::cout << "row: " << id << ", " << value << ", " << size << std::endl;
    }
}
catch (std::exception& e)
{
    std::cout << "exception: " << e.what() << std::endl;
}

Second sample shows how to manage a transaction:

try
{
    SQLite::Database    db("transaction.db3", SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE);

    db.exec("DROP TABLE IF EXISTS test");

    // Begin transaction
    SQLite::Transaction transaction(db);

    db.exec("CREATE TABLE test (id INTEGER PRIMARY KEY, value TEXT)");

    int nb = db.exec("INSERT INTO test VALUES (NULL, \"test\")");
    std::cout << "INSERT INTO test VALUES (NULL, \"test\")\", returned " << nb << std::endl;

    // Commit transaction
    transaction.commit();
}
catch (std::exception& e)
{
    std::cout << "exception: " << e.what() << std::endl;
}

See also

Some other simple C++ SQLite wrappers:

  • sqdbcpp: RAII design, simple, no depandencies, UTF-8/UTF-16, new BSD license
  • sqlite3cc: uses boost, modern design, LPGPL
  • sqlite3pp: uses boost, MIT License
  • SQLite++: uses boost build system, Boost License 1.0
  • CppSQLite: famous Code Project but old design, BSD License
  • easySQLite: manages table as structured objects, complex
Description
SQLiteC++ (SQLiteCpp) is a smart and easy to use C++ SQLite3 wrapper.
Readme 14 MiB
Languages
C 97.4%
C++ 2.3%
CMake 0.3%