ios sqlite

 SQLite (http://www.sqlite.org/docs.html) 是一個輕量級的關係數據庫。SQLite最初的設計目標是用於嵌入式系統,它佔用資源非常少,在嵌入式設備中,只需要幾百K的內存就夠了,目前應用於Android、iOS、Windows Phone等智能手機。iOS 使用時SQLite,只需要加入 libsqlite3.dylib 依賴以及引入 sqlite3.h 頭文件即可。

 

          數據庫操作包含打開數據庫、創建表,表的增、刪、改、查。下面代碼給出了數據庫操作。

         創建並打開數據庫:

 

-(BOOL) openDB{
   //獲取數據庫路徑
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documents = [paths objectAtIndex:0];
    NSString *database_path = [documents stringByAppendingPathComponent:DBNAME];
    
    //如果數據庫存在,則用sqlite3_open直接打開(不要擔心,如果數據庫不存在sqlite3_open會自動創建)
    //打開數據庫,這裏的[path UTF8String]是將NSString轉換爲C字符串,因爲SQLite3是採用可移植的C(而不是
    //Objective-C)編寫的,它不知道什麼是NSString.
    if (sqlite3_open([database_path UTF8String], &db) == SQLITE_OK) {
        return YES;
    }else{
        return NO;
        NSLog(@"數據庫打開失敗");
        sqlite3_close(db);
    }
}

 

         iOS中沒有提供創建數據庫的命令,當使用sqlite3_open時,如果數據庫文件不存在會自行創建數據庫,如果存在會打開數據庫。打開數據庫後就可以創建表並操作表內容了,iOS中的sqlite3使用sqlite3_exec來創建表、插入表內容、修改表內容、刪除表內容等操作,使用sqlite3_prepare_v2來查詢表。下面給給出了sqlite3_exec的封裝:

 

-(void)execSql:(NSString *)sql
{    
    if ([self openDB]) {
        char *err;
        if (sqlite3_exec(db, [sql UTF8String], NULL, NULL, &err) != SQLITE_OK) {
            NSLog(@"數據庫操作數據失敗!");
        }else{
            NSLog(@"%@",sql);
        }
        sqlite3_close(db);
    }    
}

 

 

        創建表:

        

-(void) insertData{
    NSString *insertSql1= [NSString stringWithFormat:
                      @"INSERT INTO '%@' ('%@', '%@', '%@') VALUES ('%@', '%@', '%@')",
                      TABLENAME, NAME, AGE, ADDRESS, @"張三", @"13", @"濟南"];
    [self execSql:insertSql1];
    
    NSString *insertSql2 = [NSString stringWithFormat:
                      @"INSERT INTO '%@' ('%@', '%@', '%@') VALUES ('%@', '%@', '%@')",
                      TABLENAME, NAME, AGE, ADDRESS, @"李四", @"12", @"濟南"];
    [self execSql:insertSql2];
    
}

 

 

         修改表:

 

-(void) updateData{
    NSString *updateSql = [NSString stringWithFormat:
                      @"UPDATE '%@' SET '%@' = '%@' WHERE '%@' = '%@'",
                      TABLENAME,   AGE,  @"15" ,AGE,  @"13"];
    [self execSql:updateSql];
}


         刪除表內容:

 

 

-(void) deleteData{
    NSString *sdeleteSql = [NSString stringWithFormat:
                      @"delete from %@ where %@ = '%@'",
                      TABLENAME, NAME, @"張三"];
    [self execSql:sdeleteSql];
}


上面實現了表內容的增、改、刪,下面實現表內容查詢。

 

 

 

-(void) selectData{

    [self openDB];
    NSString *sqlQuery = [NSString stringWithFormat:
                      @"SELECT * FROM %@",TABLENAME];
    sqlite3_stmt * statement;
    
    if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK) {
        
        //查詢結果集中一條一條的遍歷所有的記錄,這裏的數字對應的是列值,注意這裏的列值

        while (sqlite3_step(statement) == SQLITE_ROW) {
            char *name = (char*)sqlite3_column_text(statement, 1);
            NSString *nsNameStr = [[NSString alloc]initWithUTF8String:name];
            
            int age = sqlite3_column_int(statement, 2);
            
            char *address = (char*)sqlite3_column_text(statement, 3);
            NSString *nsAddressStr = [[NSString alloc]initWithUTF8String:address];
            
            NSLog(@"name:%@  age:%d  address:%@",nsNameStr,age, nsAddressStr);
        }
    }else{
        NSLog(@"select error:%@",sqlQuery);

    }
    sqlite3_close(db);
}


好了,這就是全部了,iOS中數據庫操作的類封裝的並不太好用,希望大家儘量封裝自己的類,。

 

 

Demo下載

 

 

/**
* @author 張興業
*  iOS入門羣:83702688
*  android開發進階羣:241395671
*  我的新浪微博:@張興業TBOW
*/
 
http://www.cnblogs.com/xiaobaizhu/archive/2012/12/07/2808170.html

 

發佈了27 篇原創文章 · 獲贊 5 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章