読者です 読者をやめる 読者になる 読者になる

Natural Software

KinectなどのDepthセンサーを中心に活動しています

SQLite まずはちょいと改造

プログラム C++ SQLite

先日作ったやつからちょいと改造

使用例はこんなカンジ。
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例外クラス