iOS- SQLite3的基本使用
- iOS- 簡單說說iOS移動客戶端SQLite3的基本使用
- 1.為什么要使用SQLite3?
-
?大量數據需要存儲?管理數據,存儲數據SQLite是一種關系型數據庫(也是目前移動客戶端的主流數據庫)2.SQLite3的幾種存儲類型a.NULL: 表示該值為NULL值b.INTEGER: 無符號整型值c.REAL: 浮點值d.TEXT: 文本字符串e.BLOB: 二進制數據(比如文件)?實際上SQLite是無類型的,建表時聲明或不聲明類型都可以,也就意味著創表語句可以這么寫:create table t_student(name, age);但為了保持良好的編程規范,方便程序員之間的交流,編寫建表語句的時候最好加上每個字段的具體類型3.SQLite3的具體實現3.1?在iOS中要使用SQLite3,需要添加庫文件:libsqlite3.dylib并導入主頭文件,這是一個C語言的庫3.2創建數據庫(sqlite3_opendb)復制代碼1 // 設置沙盒中的文件路徑2 // 提示:在自己開發中,不要用.db結尾的sqlite數據庫文件名3 NSString *dbPath = [@"readme.db" appendDocumentDir];4 NSLog(@"%@", dbPath);56 /**7 sqlite3_open89 1) 如果數據庫存在,直接打開10 2) 如果數據庫不存在,先創建數據庫文件,再打開11 */12 _db = NULL;1314 if (SQLITE_OK == sqlite3_open([dbPath UTF8String], &_db)) {15 NSLog(@"數據庫打開成功");16 } else {17 NSLog(@"數據庫打開失敗");18 }復制代碼3.31.單步執行操作(sqlite3_exec)復制代碼#pragma mark 單步執行SQL- (void)execSQL:(NSString *)sql message:(NSString *)message{// 執行SQL語句char *errmsg = NULL;if (SQLITE_OK == sqlite3_exec(_db, [sql UTF8String], NULL, NULL, &errmsg)) {NSLog(@"%@成功!", message);} else {// C語言中字符串輸出應該用%sNSLog(@"%@失敗 - %s", message, errmsg);}}復制代碼2.創建數據表復制代碼1 // 1. 檢查沙盒,判斷數據庫文件是否存在,如果存在就不再建表;2 // 2. 數據庫的方法:IF NOT EXISTS,放在表名之前即可3 // 定義SQL語句4 NSString *sql = @"CREATE TABLE IF NOT EXISTS T_Person (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, name TEXT, gender INTEGER, age INTEGER, height REAL)";56 [self execSQL:sql message:@"創建數據表"];復制代碼4.插入數據1 // 1. SQL2 NSString *sql = [NSString stringWithFormat:@"INSERT INTO T_Person (name, gender, age, height) VALUES ('%@', %d, %d, %f)", person.name, person.gender, person.age, person.height];34 [self execSQL:sql message:@"新增個人記錄"];5.更新數據復制代碼1 //修改2 - (void)updatePerson:(Person *)person{345 NSString *sql = [NSString stringWithFormat:@"update t_Person set name = '%@' where id=%d",person.name,person.ID];67 [self execSQL:sql msg:@"修改"];89 }復制代碼6.刪除數據復制代碼1 //刪除2 - (void)removePerson:(NSInteger)personID{345 NSString *sql = [NSString stringWithFormat:@"delete from t_Person where id=%d",personID];67 [self execSQL:sql msg:@"刪除"];89 }復制代碼7.查詢操作–sqlite3_prepare_v2檢查sql的合法性–sqlite3_step逐行獲取查詢結果–sqlite3_coloum_xxx獲取對應類型的內容–sqlite3_finalize釋放stmt復制代碼1 // 1. SQL2 NSString *sql = @"SELECT id, name, age, gender, height FROM T_Person";34 // 2. 查詢語句通常是使用字符串拼接出來的5 // 因此,在正常使用查詢語句之前,需要檢查SQL語句的語法正確!6 sqlite3_stmt *stmt = NULL;78 if (SQLITE_OK == sqlite3_prepare_v2(_db, [sql UTF8String], -1, &stmt, NULL)) {9 NSLog(@"語法正確");10 // 利用句柄,逐一查詢符合條件的數據11 // sqlite3_step 每次提取一條查詢的記錄行,不斷重復,一直取到最后一條記錄位置12 while (SQLITE_ROW == sqlite3_step(stmt)) {13 // 取到行信息,逐一獲取每一列的內容14 // iCol對應的就是SQL語句中字段的順序,從0開始15 // 根據實際查詢字段的屬性,使用sqlite3_column_xxx取得對應的內容即可16 int ID = sqlite3_column_int(stmt, 0);17 const unsigned char *name = sqlite3_column_text(stmt, 1);18 int age = sqlite3_column_int(stmt, 2);19 int gender = sqlite3_column_int(stmt, 3);20 CGFloat height = sqlite3_column_double(stmt, 4);2122 // const unsigned char *直接輸出看不出結果,需要轉換23 NSString *nameUTF8 = [NSString stringWithUTF8String:(const char *)name];2425 Person *p = [Person personWithID:ID name:nameUTF8 age:age gender:gender height:height];2627 NSLog(@"%@", p);28 }29 } else {30 NSLog(@"語法錯誤");31 }復制代碼
posted on 2014-02-12 14:57 ACM_Someone like you 閱讀(362) 評論(0) 收藏 舉報
浙公網安備 33010602011771號