IOS之SQLite

SQLite的使用:

1.添加相關庫libsqlite3.tdb

buid phases  - >  link binary with libraries  -> 點擊"+" ->搜索libsqlite3.tdb並添加


2.基本步驟

1)創建數據庫

- (void)openDB
{
    // 生成存放在沙盒中的數據庫完整路徑
    NSString *docDir = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
    NSString *dbName = [docDir stringByAppendingPathComponent:@"my.db"];
    
    // 如果數據庫不存在,怎新建並打開一個數據庫,否則直接打開
    if (SQLITE_OK == sqlite3_open(dbName.UTF8String, &_db)) {
        NSLog(@"創建/打開數據庫成功。");
    } else {
        NSLog(@"創建/打開數據庫失敗。");
    }
}


2)創建數據表
/**
 *  指定單步sql指令
 *
 *  @param sql sql語句
 *  @param msg 提示信息
 */
- (void)execSql:(NSString *)sql msg:(NSString *)msg
{
    char *errmsg;
    // 所謂回調:sqlite3_exec執行完成sql之後調用的方法,叫做回調方法
    if (SQLITE_OK == sqlite3_exec(_db, sql.UTF8String, NULL, NULL, &errmsg)) {
        NSLog(@"%@成功", msg);
    } else {
        NSLog(@"%@失敗 - %s", msg, errmsg);
    }
}

/**
 *  創建數據表
 */
- (void)createTable
{
    NSString *sql = @"CREATE TABLE IF NOT EXISTS t_person (id integer PRIMARY KEY AUTOINCREMENT,name text,age integer,phoneNo text)";
    
    [self execSql:sql msg:@"創建數據表"];
}

3)數據操作(增,刪,改)

創建sql語句並單步執行(sqlite3_exec)

例:增

- (void)addPerson:(Person *)person
{
    NSString *sql = [NSString stringWithFormat:@"INSERT INTO t_person (name, age, phoneNo) VALUES ('%@', %ld, '%@')", person.name, person.age, person.phoneNo];
    
    [self execSql:sql msg:@"添加個人記錄"];
    
}


4)查詢操作

- (NSArray *)queryPersonsWithSql:(NSString *)sql
{
    // 1. 評估準備SQL語法是否正確
    sqlite3_stmt *stmt = NULL;
    
    //    NSMutableArray *persons = [NSMutableArray array];
    NSMutableArray *persons = nil;
    
    if (SQLITE_OK == sqlite3_prepare_v2(_db, sql.UTF8String, -1, &stmt, NULL)) {
        // 2. 如果能夠正常查詢,調用單步執行方法,依次取得查詢結果
        // 如果得到一行記錄
        persons = [NSMutableArray array];
        
        while (SQLITE_ROW == sqlite3_step(stmt)) {
            // 3. 獲取/顯示查詢結果
            // sqlite3_column_xxx方法的第二個參數與sql語句中的字段順尋一一對應(從0開始)
            int ID = sqlite3_column_int(stmt, 0);
            const unsigned char *name = sqlite3_column_text(stmt, 1);
            int age = sqlite3_column_int(stmt, 2);
            const unsigned char *phoneNo = sqlite3_column_text(stmt, 3);
            
            NSString *nameUTF8 = [NSString stringWithUTF8String:(const char *)name];
            NSString *phoneNoUTF8 = [NSString stringWithUTF8String:(const char *)phoneNo];
            
            Person *p = [Person personWithID:ID name:nameUTF8 age:age phoneNo:phoneNoUTF8];
            [persons addObject:p];
        }
        
    } else {
        NSLog(@"SQL語法錯誤");
    }
    
    // 4. 釋放句柄
    sqlite3_finalize(stmt);
    
    return persons;
}

5)關閉數據庫

- (void)closeDB{
    sqlite3_close(_db);
}


3.sql語句

1)SQLite存儲類型:NULL,INTEGER,REAL,TEXT,BLOB

2)類型

i.數據定義語言DDL: 創建表CREATE、刪除表DROP

ii.數據操作語言DML: 增INSERT、刪DELETE、改 UPDATE

iii.數據查詢語言DQL: 查詢SELECT


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章