From a72d11e2135c2774a589ed6e22484dd524612bd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Rombauts?= Date: Tue, 10 Apr 2012 22:22:39 +0200 Subject: [PATCH] Adding a second sample to demonstrate how to manage transaction --- README.md | 42 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 13e22d0..c73cd1a 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ The goals of SQLiteC++ are: 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 connexion, +Each SQLiteC++ object must be constructed with a valid SQLite database connection, and then is always valid until destroyed. Depandancies: @@ -38,11 +38,14 @@ Depandancies: - 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). -Tot get started, look at the provided examples in main.cpp, starting by : +## 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: ```C++ try @@ -61,7 +64,7 @@ try { // Demonstrate how to get some typed column value int id = query.getColumn(0); - std::string value = query.getColumn(1); + const char* value = query.getColumn(1); int size = query.getColumn(2); std::cout << "row: " << id << ", " << value << ", " << size << std::endl; @@ -73,10 +76,37 @@ catch (std::exception& e) } ``` -For other simple C++ SQLite wrappers look also at: +## Second sample shows how to manage a transaction: +```C++ +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; +} +``` + +## For other simple C++ SQLite wrappers look also at: + + - **sqlite3cc**: uses boost, LPGPL (http://ed.am/dev/sqlite3cc and https://launchpad.net/sqlite3cc) - **sqdbcpp**: RAII design, no depandencies, UTF-8/UTF-16, new BSD license (http://code.google.com/p/sqdbcpp/) - **sqlite3pp**: uses boost, MIT License (http://code.google.com/p/sqlite3pp/) - **SQLite++**: uses boost build system, Boost License 1.0 (http://sqlitepp.berlios.de/) - - **sqlite3cc**: uses boost, LPGPL (http://ed.am/dev/sqlite3cc and https://launchpad.net/sqlite3cc) - **CppSQLite**: famous Code Project but old design, BSD License (http://www.codeproject.com/Articles/6343/CppSQLite-C-Wrapper-for-SQLite/) + - **easySQLite**: http://code.google.com/p/easysqlite/