create table t_student(name, age);
創建數據庫(sqlite3_opendb)
1 // 設置沙盒中的文件路徑 2 // 提示:在自己開發中,不要用.db結尾的sqlite數據庫文件名 3 NSString *dbPath = [@"readme.db" appendDocumentDir]; 4 NSLog(@"%@", dbPath); 5 6 /** 7 sqlite3_open 8 9 1) 如果數據庫存在,直接打開10 2) 如果數據庫不存在,先創建數據庫文件,再打開11 */12 _db = NULL;13 14 if (SQLITE_OK == sqlite3_open([dbPath UTF8String], &_db)) {15 NSLog(@"數據庫打開成功");16 } else {17 NSLog(@"數據庫打開失敗");18 }
#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語言中字符串輸出應該用%s NSLog(@"%@失敗 - %s", message, errmsg); }}
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)";5 6 [self execSQL:sql message:@"創建數據表"];
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];3 4 [self execSQL:sql message:@"新增個人記錄"];
1 //修改2 - (void)updatePerson:(Person *)person{3 4 5 NSString *sql = [NSString stringWithFormat:@"update t_Person set name = '%@' where id=%d",person.name,person.ID];6 7 [self execSQL:sql msg:@"修改"];8 9 }
1 //刪除2 - (void)removePerson:(NSInteger)personID{3 4 5 NSString *sql = [NSString stringWithFormat:@"delete from t_Person where id=%d",personID];6 7 [self execSQL:sql msg:@"刪除"];8 9 }
1 // 1. SQL 2 NSString *sql = @"SELECT id, name, age, gender, height FROM T_Person"; 3 4 // 2. 查詢語句通常是使用字符串拼接出來的 5 // 因此,在正常使用查詢語句之前,需要檢查SQL語句的語法正確! 6 sqlite3_stmt *stmt = NULL; 7 8 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);21 22 // const unsigned char *直接輸出看不出結果,需要轉換23 NSString *nameUTF8 = [NSString stringWithUTF8String:(const char *)name];24 25 Person *p = [Person personWithID:ID name:nameUTF8 age:age gender:gender height:height];26 27 NSLog(@"%@", p);28 }29 } else {30 NSLog(@"語法錯誤");31 }
作者: 清澈Saup
出處: http://www.survivalescaperooms.com/qingche/
本文版權歸作者和博客園共有,歡迎轉載,但必須保留此段聲明,且在文章頁面明顯位置給出原文連接。
新聞熱點
疑難解答