先日作ったやつからちょいと改造
使用例はこんなカンジ。
・SQL文の生成にステートメントではなくて、printf 式構文に変更した
・プロジェクトはこちらに
#毎度のことですが、ご使用は自己責任で☆
#include <iostream> #include <cassert> #include "sqlite.h" /* * sqlite3_exec から呼ばれるコールバック。 * カラム名と値を出力する。 */ int callback( void* arg, int columns, char** value, char** name ) { std::ostream* stream = static_cast<std::ostream*>(arg); for ( int i = 0; i < columns; ++i ) { *stream << '[' << name[i] << '=' << value[i] << "] "; } *stream << std::endl; return 0; } int main() { try { // databaseをオープン sqlite::Database db( ":memory:" ); // TABLE を生成 db.exec( "CREATE TABLE address ( id INTEGER PRIMARY KEY, name TEXT, addr TEXT, age INT)" ); // レコードを追加 struct { char *name; char *place; int age; } data[] = { { "kaorun", "tokyo", 20 }, { "shifon", "tokyo", 21 }, { "hana", "hokkaido", 22 }, { "mennba", "kanagawa", 23 }, { 0 } }; // 値の挿入 for ( int i = 0; data[i].name != 0; ++i ) { sqlite::Sql sql( "INSERT INTO address ( name, addr, age ) VALUES( %Q, %Q, %d )", data[i].name, data[i].place, data[i].age ); std::cout << sql.get() << std::endl; db.exec( sql.get() ); } // QUERY db.exec( "SELECT * FROM address", callback, &std::cout ); } catch ( std::exception& ex ) { std::cout << ex.what() << std::endl; } return 0; }
お次は、SQLite例外クラス