UIステップ10 SQLite 3

3148 ワード

SQLite3
  • SQLite 3はオープンソースの組み込み関係型データベースで、移植性がよく、使いやすく、メモリオーバーヘッドが小さい
  • です.
  • SQLite 3はタイプがなく、任意のタイプのデータを任意のテーブルの任意のフィールドに保存できることを意味します.たとえば、次の創表文は合法的です.
  •    create table t_person(name, age);
    
  • 可読性を保証するために、フィールドタイプを追加することをお勧めします:
  •    create table t_person(name text, age integer);
    
  • SQLite 3でよく使われる5種類のデータ型:text、integer、float、boolean、blob iOSでSQLite 3を使用し、まずライブラリファイルlibsqlite 3を追加する.dylibとインポートヘッダファイルsqlite 3.h

  • データベースの作成、開く、閉じる
  • データベース
  • を作成または開く
    // path :~/Documents/person.db
    sqlite3 *db;
    int result = sqlite3_open([path UTF8String], &db);
    
  • コード解析:
  • sqlite3_Open()はファイルパスに基づいてデータベースを開き、存在しない場合は新しいデータベースを作成します.resultが定数SQLITEに等しい場合OKは、データベース
  • を正常に開くことを示す.
  • sqlite 3*db:開いているデータベースインスタンス
  • データベースファイルのパスは、NSStringではなくC文字列で
  • に転送する必要があります.
  • データベースを閉じる:sqlite 3_close(db);

  • データを返さないSQL文の実行
  • 創表文
  • を実行する
    char *errorMsg;  //         
    char *sql = "create table if not exists t_person(id integer primary key autoincrement, name text, age integer);";
    int result = sqlite3_exec(db, sql, NULL, NULL, &errorMsg);
    
  • コード解析:
  • sqlite3_exec()は、テーブルの作成、更新、挿入、削除など、任意のSQL文を実行できます.ただし、クエリ文は、クエリされたデータ
  • を返さないため、一般的には実行されません.
  • sqlite3_exec()で実行できる文:
  • オープントランザクション:begin transaction;
  • ロールバックトランザクション:rollback;
  • コミットトランザクション:commit;



  • プレースホルダを使用したデータの挿入
    char *sql = "insert into t_person(name, age) values(?, ?);";
    sqlite3_stmt *stmt;
    if (sqlite3_prepare_v2(db, sql, -1, &stmt, NULL) == SQLITE_OK) {
        sqlite3_bind_text(stmt, 1, "  ", -1, NULL);
        sqlite3_bind_int(stmt, 2, 27);
    }
    if (sqlite3_step(stmt) != SQLITE_DONE) {
        NSLog(@"      ");
    }
    sqlite3_finalize(stmt);
    
  • コード解析:
  • sqlite3_prepare_v 2()戻り値はSQLITE_に等しいOK、SQL文の準備が成功したことを説明して、文法の問題がありません
  • sqlite3_bind_text():ほとんどのバインド関数には3つのパラメータしかありません
  • の1番目のパラメータはsqlite 3_です.stmt*タイプ
  • の2番目のパラメータはプレースホルダの位置を指し、1番目のプレースホルダの位置は1であり、0
  • ではない.
  • 3番目のパラメータは、プレースホルダがバインドする値
  • を指す.
  • の4番目のパラメータは、3番目のパラメータで伝達するデータの長さを指し、C文字列については、文字列の長さ
  • の代わりに-1を伝達することができる.
  • の5番目のパラメータは、文の実行後にメモリクリーンアップ作業を完了するために一般的に使用されるオプションの関数コールバックです.
  • sqlite_Step():SQL文を実行し、SQLITE_を返します.DONE代表は成功に実行した
  • sqlite_finalize():sqlite 3_を破棄stmt*オブジェクト

  • データの問合せ
    char *sql = "select id,name,age from t_person;";
    sqlite3_stmt *stmt;
    if (sqlite3_prepare_v2(db, sql, -1, &stmt, NULL) == SQLITE_OK) {
        while (sqlite3_step(stmt) == SQLITE_ROW) {
            int _id = sqlite3_column_int(stmt, 0);
            char *_name = (char *)sqlite3_column_text(stmt, 1);
            NSString *name = [NSString stringWithUTF8String:_name];
            int _age = sqlite3_column_int(stmt, 2);
            NSLog(@"id=%i, name=%@, age=%i", _id, name, _age);
        }
    }
    sqlite3_finalize(stmt);
    
  • コード解析
  • sqlite3_Step()SQLITE_を返すROWは、新しいレコード
  • への遍歴を表す.
  • sqlite3_column_*()各フィールドに対応する値を取得するために使用され、2番目のパラメータはフィールドのインデックスであり、0から
  • である.