UIステップ10 SQLite 3
3148 ワード
SQLite3 SQLite 3はオープンソースの組み込み関係型データベースで、移植性がよく、使いやすく、メモリオーバーヘッドが小さい です. SQLite 3はタイプがなく、任意のタイプのデータを任意のテーブルの任意のフィールドに保存できることを意味します.たとえば、次の創表文は合法的です. 可読性を保証するために、フィールドタイプを追加することをお勧めします: SQLite 3でよく使われる5種類のデータ型:text、integer、float、boolean、blob iOSでSQLite 3を使用し、まずライブラリファイルlibsqlite 3を追加する.dylibとインポートヘッダファイルsqlite 3.h
データベースの作成、開く、閉じるデータベース を作成または開くコード解析: sqlite3_Open()はファイルパスに基づいてデータベースを開き、存在しない場合は新しいデータベースを作成します.resultが定数SQLITEに等しい場合OKは、データベース を正常に開くことを示す. sqlite 3*db:開いているデータベースインスタンス データベースファイルのパスは、NSStringではなくC文字列で に転送する必要があります.
データベースを閉じる:sqlite 3_close(db);
データを返さないSQL文の実行創表文 を実行するコード解析: sqlite3_exec()は、テーブルの作成、更新、挿入、削除など、任意のSQL文を実行できます.ただし、クエリ文は、クエリされたデータ を返さないため、一般的には実行されません. sqlite3_exec()で実行できる文: オープントランザクション:begin transaction; ロールバックトランザクション:rollback; コミットトランザクション:commit;
プレースホルダを使用したデータの挿入コード解析: 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*オブジェクト
データの問合せコード解析 sqlite3_Step()SQLITE_を返すROWは、新しいレコード への遍歴を表す. sqlite3_column_*()各フィールドに対応する値を取得するために使用され、2番目のパラメータはフィールドのインデックスであり、0から である.
create table t_person(name, age);
create table t_person(name text, age integer);
データベースの作成、開く、閉じる
// path :~/Documents/person.db
sqlite3 *db;
int result = sqlite3_open([path UTF8String], &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);
プレースホルダを使用したデータの挿入
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);
データの問合せ
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);