2012年11月17日土曜日

SQLiteを使ってみる 第1回

まずはオープンとクローズ。

基本的にはsqlite3_open()でDBへの接続をオープンし、操作を終えたらsqlite3_close()でクローズすれば良い。以下は、オープン・クローズするだけのサンプル

#include <stdio.h>
#include <sqlite3.h>
#define DEFAULT_FILENAME "test1.sqlite3"
int main(int argc, char **argv) {
    sqlite3 *db = NULL;
    int rc;
    char *filename = DEFAULT_FILENAME;
    // open
    if (argc >= 2) filename = argv[1];
    rc = sqlite3_open(filename, &db);
    if (rc == SQLITE_OK)
        printf("sqlite3_open() : OK, db = %p\n", db);
    else
        printf("sqlite3_open() : NG(%d), db = %p\n", rc, db);
    // do something ...
    // close
    rc = sqlite3_close(db);
    if (rc == SQLITE_OK)
        printf("sqlite3_close() : OK, db = %p\n", db);
    else
        printf("sqlite3_close() : NG(%d), db = %p\n", rc, db);
    return 0;
}

まず、接続はsqlite3型のポインタで表現する。ユーザーは、APIが確保したsqlite3型のオブジェクトの場所を教えてもらうわけだ。sqlite3_open()は戻り値がint型のエラーコードなので、sqlite3型のオブジェクトのアドレスはポインタの参照を介して返してもらう。指定した名前のファイルが存在しなければ、新規ファイルの作成を試みる。なお、sqlite3_open()に限らず、基本的に引数の文字列はUTF-8。名前の末尾に16が付くAPIはUTF-16。

所望の操作を終えたらsqlite3_close()。sqlite3_open()で確保したリソースはこれで解放される。

注意すべきは、sqlite3_open()に失敗してもsqlite3_close()が必要な点。sqlite3型オブジェクトが表現するものは、あくまで「DBへの接続」。そして接続に失敗した場合でも、エラー情報を保持したsqlite3型のオブジェクトが確保される。失敗したからと言って放置せず、sqlite3_close()でこのオブジェクトを捨ててやらなければならない。fopen()に失敗したらfclose()しない普通のファイルとは、使い勝手が異なるところだ。

0 件のコメント:

コメントを投稿