3.Sqlite3使用—IOS

1.0 SQlite3數據庫

1.1 終端的命令行使用

    //進入SQlite3模式
    sqlite3 name;

    //創建名爲name的數據庫文件
    .database;

    //查詢當前所有列表
    .table;

    //創建數據列表(autoincretment爲自動爲ID計算(可去掉),varchar(20)限制20個字符,smamllint短整型)
    create table name(id integer primary key autoincretment, name varchar(20), age smallint);

    //查詢name列表中的所有數據
    select * from name;

    //查詢列表中name列表中的age、name屬性
    select name,age from name;

    //根據條件來查詢name列表中的數據
    select * from name where id >= 4;

    //插入name列表中的數據(需要對應數據)
    insert into name(1, 'name', 20);

    //刪除name列表中的數據(where後面加條件)
    delete from name where id = 0;

    //更新name列表中的數據(set後加修改的內容,where後加條件)
    update name set id = 10 where id = 0;

1.2代碼

  • 需要導入libsqlite3.0.tbd文件
@interface Sqlite3ViewController ()

@property (nonatomic) sqlite3 *dataBase;

@end

@implementation Sqlite3ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    [self.view setBackgroundColor:[UIColor whiteColor]];

    NSArray *nameArr = @[@"創建數據列表", @"插入數據", @"查詢數據", @"刪除數據", @"修改數據"];
    for(int i=0; i<nameArr.count; i++){
        UIButton *btn = [UIButton buttonWithType:UIButtonTypeSystem];
        btn.frame = CGRectMake((10 + 100 * (i % 4)), (80 + i / 4 * 40), 50, 40);
        [btn setTitle:nameArr[i] forState:UIControlStateNormal];
        [btn addTarget:self action:@selector(btnAction:) forControlEvents:UIControlEventTouchDown];
        [btn sizeToFit];
        btn.tag = 1000+i;
        [self.view addSubview: btn];
    }
}

- (void)btnAction: (UIButton *)btn{
    switch (btn.tag) {
        case 1000:  //創建數據列表
            [self createTable];
            break;
        case 1001:  //插入數據
            [self inserData];
            break;
        case 1002:  //查詢數據
            [self queryData];
            break;
        case 1003:  //刪除數據
            [self deleteData];
            break;
        case 1004:  //修改數據
            [self updata];
        default:
            break;
    }
}


/**
 創建數據列表
 */
-(void)createTable{
    if(sqlite3_open([[self path] UTF8String], &(_dataBase)) != SQLITE_OK){
        NSLog(@"創建數據數據庫失敗");
        return;
    }

    char *error;
    const char *createSQL = "create table if not exists list(id integer primary key autoincrement,name text,sex text)";

//    第一個參數: 需要執行SQL語句的數據庫對象
//    第二個參數: 需要執行的SQL語句
//    第三個參數: 回調函數
//    第四個參數: 第三個參數的參數
//    第五個參數: 接收錯誤信息
    int tabelResult = sqlite3_exec(self.dataBase, createSQL, NULL, NULL, &error);

    if(tabelResult != SQLITE_OK){
        NSLog(@"創建列表失敗 %i", tabelResult);
    }
    else{
        NSLog(@"成功創建數據列表");
    }

    sqlite3_close(self.dataBase);
}


/**
 插入數據
 */
- (void)inserData{

    if(sqlite3_open([[self path] UTF8String], &(_dataBase)) != SQLITE_OK){
        NSLog(@"創建數據數據庫失敗");
        return;
    }

    const char *insertSQL = "insert into list (name,sex) values ('iosRunner','male')";

    sqlite3_stmt *stmt;

    int insertResult = sqlite3_prepare_v2(self.dataBase, insertSQL, -1, &stmt, nil);
    if(insertResult != SQLITE_OK){
        NSLog(@"插入數據失敗 %i", insertResult);
    }
    else{
        NSLog(@"插入數據成功 %i", insertResult);
        sqlite3_step(stmt);
    }

    //銷燬
    sqlite3_finalize(stmt);

    //關閉數據庫
    sqlite3_close(self.dataBase);
}


/**
 查詢數據
 */
-(void)queryData{

    if(sqlite3_open([[self path] UTF8String], &(_dataBase)) != SQLITE_OK){
        NSLog(@"創建數據數據庫失敗");
        return;
    }

    const char *querySQL = "select * from list";

    sqlite3_stmt *stmt;
    int queryResult = sqlite3_prepare_v2(self.dataBase, querySQL, -1, &stmt, nil);
    if(queryResult != SQLITE_OK){
        NSLog(@"查詢數據失敗 %i", queryResult);
    }
    else{
        NSLog(@"查詢數據中 %i", queryResult);
        while (sqlite3_step(stmt) == SQLITE_ROW) {
            NSLog(@"%i %s %s", sqlite3_column_int(stmt, 0), sqlite3_column_text(stmt, 1), sqlite3_column_text(stmt, 2));
        }
    }

    sqlite3_finalize(stmt);
    sqlite3_close(self.dataBase);
}


/**
 修改數據
 */
-(void)updata{

    if(sqlite3_open([[self path] UTF8String], &(_dataBase)) != SQLITE_OK){
        NSLog(@"創建數據數據庫失敗");
        return;
    }

    const char *updateSQL = "update list set name = 'buhui' where name = 'iosRunner'";

    sqlite3_stmt *stmt;
    int updateResult = sqlite3_prepare_v2(self.dataBase, updateSQL, -1, &stmt, nil);
    if(updateResult != SQLITE_OK){
        NSLog(@"修改數據失敗 %i", updateResult);
    }
    else{
        NSLog(@"修改成功");
        sqlite3_step(stmt);
    }

    sqlite3_finalize(stmt);
    sqlite3_close(self.dataBase);
}

/**
 刪除數據庫的數據
 */
-(void)deleteData{

    if(sqlite3_open([[self path] UTF8String], &(_dataBase)) != SQLITE_OK){
        NSLog(@"創建數據數據庫失敗");
        return;
    }

    const char *deleteSQL = "delete from list where name = 'iosRunner'";

    sqlite3_stmt *stmt;
    int deleteResult = sqlite3_prepare_v2(self.dataBase, deleteSQL, -1, &stmt, nil);
    if(deleteResult != SQLITE_OK){
        NSLog(@"刪除數據失敗 %i", deleteResult);
    }
    else{
        NSLog(@"刪除數據成功");
        sqlite3_step(stmt);
    }

    sqlite3_finalize(stmt);
    sqlite3_close(self.dataBase);
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


/**
 生成路徑

 @return 數據庫地址
 */
-(NSString *)path{
    //取得數據庫的地址,保存在沙盒中
    NSString *documentStr = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];

    NSString *path = [NSString stringWithFormat:@"%@/crylown.db", documentStr];

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