sqlite3資料庫操作

weixin_33924312發表於2018-03-07

在iOS中使用SQLite3首先要新增庫檔案libsqlite3.dylib並引入標頭檔案
1、開啟資料庫sqlite3_open(<#const char *filename#>, <#sqlite3 **ppDb#>)
(1)作用:把一個檔名稱傳遞給他,它會自動檢測這個檔案是否存在,如果不存在的話,會自動建立相應的檔案(這裡為資料庫檔案,剛建立為空)。
(2)引數:它的第一個引數為檔案的名稱(需轉換為C語言的),第二個引數是資料庫的例項,sqlite3 *db;
說明:sqlite3是一種型別,db是資料庫的控制程式碼,就是資料庫的象徵,如果要進行增刪改查,就得操作db這個例項。
(3)返回值:它的返回值為int型的,根據函式的返回值可以知道,開啟資料庫檔案是成功還是失敗,如果返回值是SQLITE_OK則說明成功,否則為失敗。

//設定資料庫路徑

NSString *dbPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject] stringByAppendingString:@"/text.sqlite"];
if (sqlite3_open(dbPath.UTF8String, &_db) == SQLITE_OK) {
    NSLog(@"開啟資料庫成功");
    //開啟資料庫成功後建立一個表
    //操作命令的字串
    //注意字串的結束處有 ; 號
    NSString *newListSQL = @"create table if not exists t_text(id integer primary key autoincrement,name text);";
    char *errMsg;
    sqlite3_exec(_db, newListSQL.UTF8String, NULL, NULL, &errMsg);
    if (errMsg) {
        NSLog(@"建表失敗 -- %s",errMsg);
    }else{
        NSLog(@"建表成功");
    }
}else{
    NSLog(@"開啟資料庫失敗");
}
//2、增
NSString *addQSL = [NSString stringWithFormat:@"insert into t_text('%@') values('%@');",@"name",@"33"];
char *errMsg;
sqlite3_exec(_db, addQSL.UTF8String, NULL, NULL, &errMsg);
if (errMsg == SQLITE_OK) {
    NSLog(@"新增成功!");
}else{
    NSLog(@"新增失敗!%s",errMsg);
}
//3、刪
NSString *deleteSQL = [NSString stringWithFormat:@"delete from t_text where id == 2"];
sqlite3_exec(_db, deleteSQL.UTF8String, NULL, NULL, &errMsg);
if (errMsg == SQLITE_OK) {
    NSLog(@"刪除成功!");
}else{
    NSLog(@"刪除失敗!%s",errMsg);
}
//4、改
NSString * updateSQL = @"update t_text set name = 'hello-world' where id = 1;";
sqlite3_exec(_db, updateSQL.UTF8String, NULL, NULL, &errMsg);
if (errMsg) {
    NSLog(@"修改失敗--%s",errMsg);
}else{
    NSLog(@"修改成功");
}
//5、查
NSString * searchSQL = @"select * from t_text;";
//查詢的控制程式碼,遊標
sqlite3_stmt * stmt;
if (sqlite3_prepare(_db, searchSQL.UTF8String, -1, &stmt, NULL) == SQLITE_OK) {
    //查詢資料
    while (sqlite3_step(stmt) == SQLITE_ROW) {
        //獲取表資料的內容
        //sqlite3_column_text('控制程式碼',欄位索引值)
        NSString * name = [NSString stringWithCString:(const char *)sqlite3_column_text(stmt, 1) encoding:NSUTF8StringEncoding];
        NSLog(@"name = %@",name);
    }
    
}

相關文章