標籤:android style blog color 使用 os io 檔案
SQLite 是一個輕量級的關聯式資料庫。SQLite最初的設計目標是用於嵌入式系統,它佔用資源非常少,在嵌入式裝置中,只需要幾百K的記憶體就夠了,目前應用於Android、iOS、Windows Phone等智能手機。iOS 使用時SQLite,只需要加入 libsqlite3.dylib 依賴以及引入 sqlite3.h 標頭檔即可。
資料庫操作包含開啟資料庫、建立表,表的增、刪、改、查。下面代碼給出了資料庫操作.
建立並開啟資料庫:
//擷取資料庫路徑 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來查詢表。
-(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); } }
建立表:
NSString *sqlCreateTable = [NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS ‘%@‘ (‘%@‘ INTEGER PRIMARY KEY AUTOINCREMENT, ‘%@‘ TEXT, ‘%@‘ INTEGER, ‘%@‘ TEXT)",TABLENAME,ID,NAME,AGE,ADDRESS]; [self execSql:sqlCreateTable];
插入資料:
-(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); }