iOS開發中SQLite簡單使用(基礎用法:創建表,增、刪、改、查)

SQLite,是一款輕型的數據庫,是遵守ACID的關係型數據庫管理系統,它包含在一個相對小的C庫中。它是D.RichardHipp建立的公有領域項目。它的設計目標是嵌入式的,而且目前已經在很多嵌入式產品中使用了它,它佔用資源非常的低,在嵌入式設備中,可能只需要幾百K的內存就夠了。它能夠支持Windows/Linux/Unix等等主流的操作系統,同時能夠跟很多程序語言相結合,比如 Tcl、C#、PHP、Java等,還有ODBC接口,同樣比起Mysql、PostgreSQL這兩款開源的世界著名數據庫管理系統來講,它的處理速度比他們都快。SQLite第一個Alpha版本誕生於2000年5月。 至2015年已經有15個年頭,SQLite也迎來了一個版本 SQLite 3已經發布。


iOS開發中SQLite簡單使用:

1.首先要添加庫文件libsqlite3.tbd  

2.一般使用的時候都是自己封裝一個類然後方便使用。

創建類SQLiteManger,在SQLiteManger中導入頭文件

#import <sqlite3.h>

然後創建實體類,類似於model方便使用

SQLiteModel

2.1 打開數據庫

- (BOOL)openTheDatabase{

    //獲取數據庫文件路徑

    NSString *filePath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/sqlite.db"];


    //初始化sqlite

    _sqlite = nil;

    //打開數據庫文件,如果文件存在,則直接打開,如果不存在則創建新的文件然後打開

    int result = sqlite3_open([filePath UTF8String], &_sqlite);

    

    if (result != SQLITE_OK) {

        NSLog(@"數據庫打開失敗!");

        return NO;

    }

    NSLog(@"數據庫打開成功!");

    return YES;

}

這裏我們把打開數據庫的代碼寫在一個方法裏,因爲跟其他的數據庫一樣sqlite的每一個數據庫都是要先打開數據庫纔可以操作


2.2 創建表

這裏我們創建一個表名叫t_user的表   四個字段  主鍵爲userId(text類型)  ,username(text類型) ,age(integer類型) ,sex(text類型

   - (BOOL)createTable{

    //1.打開數據庫

    if (![self openTheDatabase]) {

        return NO;

    }

    //2.創建SQL語句

    NSString *sqlStr = @"create table t_user(userId text primary key not null,username text,age integer,sex text)";

 //3.創建表

char *error = nil;

    int result = sqlite3_exec(_sqlite, [sqlStr UTF8String], NULLNULL, &error);

    

    if (result == SQLITE_OK) {

        NSLog(@"表格創建成功");

        sqlite3_close(_sqlite);

        return YES;

    }

    NSLog(@"表格創建失敗");

    sqlite3_close(_sqlite);

    return NO;

}


2.3 插入數據

- (BOOL)insertDataWithUserId:(NSString *)userId username:(NSString *)username age:(int)age sex:(NSString *)sex{

    //1.打開數據庫

    

    if (![self openTheDatabase]) {

        return NO;

    }

    

    //2.編寫sql語句 value值需要綁定   ?代替

    NSString *sqlStr = @"insert into t_user(userId,username,age,sex) values(?,?,?,?)";

    

    //3.編譯sql語句

    

    //聲明stmt

    sqlite3_stmt *stmt = nil;

    int result = sqlite3_prepare_v2(_sqlite, [sqlStr UTF8String], -1, &stmt, NULL);

    

    //編譯不成功直接返回

    if (result != SQLITE_OK) {

        NSLog(@"編譯失敗");

        return NO;

    }

    

    //4.綁定參數

    sqlite3_bind_text(stmt, 1, [userId UTF8String], -1, NULL);

    sqlite3_bind_text(stmt, 2, [username UTF8String], -1, NULL);

    sqlite3_bind_int(stmt, 3, age);

    sqlite3_bind_text(stmt, 4, [sex UTF8String], -1, NULL);


    //5.執行sql語句

    

    int step = sqlite3_step(stmt);

    NSLog(@"返回的狀態碼是:%d  101是成功",step);

    if (step == SQLITE_ERROR) {

        NSLog(@"stmt執行失敗!");

        //關閉數據庫

        sqlite3_close(_sqlite);

        return NO;

    }else if (step == SQLITE_CONSTRAINT){

        //關閉數據庫

        sqlite3_close(_sqlite);

        return NO;

    }

    

    

    //關閉編譯後的stmt 關閉數據庫

    sqlite3_finalize(stmt);

    sqlite3_close(_sqlite);

    NSLog(@"插入成功");

    return YES;

}


2.4查詢所有數據

- (NSArray *)queryData{

    //1.打開數據庫

    if (![self openTheDatabase]) {

        return nil;

    }

    

    //2.編寫sql語言

    NSString *sqlStr = @"select * from t_user ";

    

    //3.編譯sql語句

    sqlite3_stmt *stmt = nil;

    

    int result = sqlite3_prepare_v2(_sqlite, [sqlStr UTF8String], -1, &stmt, NULL);

    

    if (result != SQLITE_OK) {

        NSLog(@"編譯失敗!");

        

        return nil;

    }

    

    

    //4.綁定參數

    

    //5.執行sql sqlite3_step分步執行(單次)

    int step = sqlite3_step(stmt);

    

    if (step == SQLITE_ERROR) {

        NSLog(@"執行錯誤");

        

        return nil;

    }

    

    NSMutableArray *array = [NSMutableArray array];

    

    //判斷執行該步後是否還有剩餘數據

    while (step == SQLITE_ROW) {

        

        

        SQLiteModel *model = [[SQLiteModel alloc]init];

        

        //獲取該該條數據的詳細字段信息

        

        //userId

        model.userId = [NSString stringWithCString:(const char *)sqlite3_column_text(stmt, 0) encoding:NSUTF8StringEncoding];

        //姓名

        model.username = [NSString stringWithCString:(const char *)sqlite3_column_text(stmt, 1) encoding:NSUTF8StringEncoding];

        //年齡

        model.age = sqlite3_column_int(stmt, 2);

        //性別

        model.sex = [NSString stringWithCString:(const char *)sqlite3_column_text(stmt, 3) encoding:NSUTF8StringEncoding];

        

        [array addObject:model];

        step = sqlite3_step(stmt);

    }

    

    //6.關閉數據庫,關閉編譯後的stmt

    sqlite3_finalize(stmt);

    sqlite3_close(_sqlite);

    

    //返回數據數組

    return  array;

}



2.5根據userId更新某一條數據

- (BOOL)updateDataWithUserId:(NSString *)userId newName:(NSString *)newName newAge:(int)newAge newSex:(NSString *)newSex{

    //1.打開數據庫

    if (![self openTheDatabase]) {

        return NO;

    }


    //2.編寫sql語句 value值需要綁定   ?代替

    NSString *sqlStr = @"update t_user set username = ?,age = ?,sex = ? where userId = ? ";

    

    //3.編譯sql語句

    

    //聲明stmt

    sqlite3_stmt *stmt = nil;

    

    int result = sqlite3_prepare_v2(_sqlite, [sqlStr UTF8String], -1, &stmt, NULL);

    

    //編譯不成功直接返回

    if (result != SQLITE_OK) {

        NSLog(@"編譯失敗");

        return NO;

    }

    

    //4.綁定參數

    sqlite3_bind_text(stmt, 1, [newName UTF8String], -1, NULL);

    sqlite3_bind_int(stmt, 2, newAge);

    sqlite3_bind_text(stmt, 3, [newSex UTF8String], -1, NULL);

    sqlite3_bind_text(stmt, 4, [userId UTF8String], -1, NULL);

    

    

    //5.執行sql語句

    

    int step = sqlite3_step(stmt);

    if (step == SQLITE_ERROR) {

        NSLog(@"stmt執行失敗!");

        //關閉數據庫

        sqlite3_close(_sqlite);

        

        return NO;

    }

    

    //關閉數據庫  關閉編譯後的stmt

    sqlite3_finalize(stmt);

    sqlite3_close(_sqlite);

    

    NSLog(@"更新成功");

    return YES;

}


2.6根據userId刪除一條數據

- (BOOL)deleteDataWithUserId:(NSString *)userId{

    //1.打開數據庫

    if (![self openTheDatabase]) {

        return NO;

    }

    

    //2.編寫sql語句 value值需要綁定   ?代替

    NSString *sqlStr = @"delete from t_user where userId = ? ";


    //3.編譯sql語句

    

    //聲明stmt

    sqlite3_stmt *stmt = nil;

    int result = sqlite3_prepare_v2(_sqlite, [sqlStr UTF8String], -1, &stmt, NULL);

    

    //編譯不成功直接返回

    if (result != SQLITE_OK) {

        NSLog(@"編譯失敗");

        return NO;

    }

    

    //4.綁定參數

    sqlite3_bind_text(stmt, 1, [userId UTF8String], -1, NULL);

    

    //5.執行sql語句

    int step = sqlite3_step(stmt);

    if (step == SQLITE_ERROR) {

        NSLog(@"stmt執行失敗!");

        //關閉數據庫

        sqlite3_close(_sqlite);

        return NO;

    }

    

    //關閉數據庫  關閉編譯後的stmt

    sqlite3_finalize(stmt);

    sqlite3_close(_sqlite);

    

    NSLog(@"刪除成功");

    return YES;

}


3.demo地址https://github.com/gunmm/SQLiteDemo.git








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