天天看點

iOS--sqlite--增删改查

代碼部分:

#import "ViewController.h"
#import <sqlite3.h>
@interface ViewController ()

@end

@implementation ViewController


- (void)viewDidLoad {
    [super viewDidLoad];
    
    //打開資料庫:假如這個路徑下有這個檔案的話直接打開;沒有這個檔案就先建立該檔案,再打開
    NSString *filePath = [self getFilePath];
    sqlite3 *database = nil;
    /*
     參數的意思
     參數1:檔案路徑c語言格式的字元串
     參數2:資料庫的操作對象,傳進去一個資料庫操作的指針
     */
    if (sqlite3_open([filePath UTF8String], &database) != SQLITE_OK) {
        NSLog(@"資料庫打開失敗");
        //斷言:用來讓程式崩潰。condition = YES 程式不會崩潰,condition = NO 程式會崩潰
        NSAssert(NO, @"資料庫打開失敗");
    }
    
    // 資料庫打開成功之後
    NSString *createSQL = @"CREATE TABLE IF NOT EXISTS students(id integer primary key,name text,age integer,sex text)";
    char *errmsg = nil;
    /*
     參數
     1.資料庫操作對象
     2.資料庫操作語句,c語言格式的字元串
     3.c語言的方法,屬于一個回調
     4.也是給回調方法傳遞的參數
     5.執行sql語句的錯誤資訊
     */
    
    if (sqlite3_exec(database, [createSQL UTF8String], NULL, NULL, &errmsg) != SQLITE_OK)
    {
        NSLog(@"建立表失敗 %s",errmsg);
    }
    
    //    // 建立成功之後
    //        NSString *insertSQL0 = @"INSERT INTO students(name,age,sex) VALUES('xiao',153,'man')";
    //    if (sqlite3_exec(database, [insertSQL0 UTF8String], NULL, NULL, &errmsg)!= SQLITE_OK)
    //    {
    //        NSLog(@"插入資料失敗");
    //    }
    //    NSString *insertSQL1 = @"INSERT INTO students(name,age,sex) VALUES('d',5,'woman')";
    //    if (sqlite3_exec(database, [insertSQL1 UTF8String], NULL, NULL, &errmsg)!= SQLITE_OK)
    //    {
    //        NSLog(@"插入資料失敗");
    //    }
    //    NSString *insertSQL2 = @"INSERT INTO students(name,age,sex) VALUES('hhg',15,'man')";
    //    if (sqlite3_exec(database, [insertSQL2 UTF8String], NULL, NULL, &errmsg)!= SQLITE_OK)
    //    {
    //        NSLog(@"插入資料失敗");
    //    }
    //    NSString *insertSQL3 = @"INSERT INTO students(name,age,sex) VALUES('xxx',56,'woman')";
    //    if (sqlite3_exec(database, [insertSQL3 UTF8String], NULL, NULL, &errmsg)!= SQLITE_OK)
    //    {
    //        NSLog(@"插入資料失敗");
    //    }
    
    //    // 更新
    //    NSString *updateSQL = @"UPDATE students SET name = 'liuliu' WHERE name = 'xxx'";
    //    if (sqlite3_exec(database, [updateSQL UTF8String], NULL, NULL, &errmsg) != SQLITE_OK)
    //    {
    //        NSLog(@"更新資料失敗 %s",errmsg);
    //    }else
    //    {
    //        NSLog(@"更新資料成功");
    //    }
    
    
    // 删除
    NSString *deleteSQL = @"DELETE FROM students WHERE id = 3";
    if (sqlite3_exec(database, [deleteSQL UTF8String], NULL, NULL, &errmsg) != SQLITE_OK)
    {
        NSLog(@"删除資料失敗");
    }
    
    // 插入資料成功之後
    // 查詢
    /*
     1.資料庫操作對象
     2.查詢語句
     3.讀取的位元組數。一般情況下我們全部讀取:-1表示不限制讀取的位元組數
     4.儲存的是讀出來的所有資料,儲存的每一條記錄
     5.儲存的是,如果第三個參數不是負數,那麼沒讀完的位元組都儲存pzTail裡面
     */
    
    NSString *selectSQL = @"SELECT * FROM students";
    sqlite3_stmt *stmt = nil;
    //判斷,資源配置設定成功,再去取每一條記錄
    if (sqlite3_prepare_v2(database,[selectSQL UTF8String],-1,&stmt,NULL) == SQLITE_OK)
    {
        //sqlite3_step(stmt) == SQLITE_DONE 代表讀取完畢,沒有下一條資料
        //sqlite3_step(stmt) == SQLITE_ROW 代表沒有讀取完畢,還有下一條資料
        while (sqlite3_step(stmt) == SQLITE_ROW) {
            //擷取每一條資料
            //儲存的資料對象stmt,擷取這個字段的索引位從0開始
            char *name = (char *)sqlite3_column_text(stmt, 1);
            int rowID = sqlite3_column_int(stmt, 0);
            char *sex = (char *)sqlite3_column_text(stmt, 3);
            int age = sqlite3_column_int(stmt, 2);
            
            NSLog(@"查詢到的資料 rowID = %d name = %s age = %d sex = %s",rowID,name,age,sex);
        }
    }
    sqlite3_finalize(stmt);
    sqlite3_close(database);
    
}
#pragma mark - 擷取路徑
-(NSString *)getFilePath
{
    NSLog(@"%@",NSHomeDirectory());
    return [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/dababase.sqlite"];
}
           

附上完整demo:http://download.csdn.net/detail/csdn_hhg/9214899

繼續閱讀