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); } }
建立表:
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);}
好了,這就是全部了,iOS中資料庫操作的類封裝的並不太好用,希望大家盡量封裝自己的類,。
Demo下載
/**
* @author 張興業* http://blog.csdn.net/xyz_lmn* iOS入門群:83702688
* android開發進階群:241395671
* 我的新浪微博:@張興業TBOW*/
http://www.cnblogs.com/xiaobaizhu/archive/2012/12/07/2808170.html