一、之前使用數據庫,由於通常就創建一張表,因此都是本身寫代碼建立,沒用過fmdb,此次由於項目中涉及聊天模塊,須要多張表格和數據庫保存聊天記錄git
按照之前方法很差操做,就研究了下fmdb,發現確實挺方便的。FMDB下載地址:https://github.com/ccgus/fmdb。github
二、導入FMDB文件,再導入libsqlite3.tbd依賴包。sql
//建立打開數據庫
NSString *path = [self getDBPath:@"student"];//若是名稱爲空 數據庫斷開時會刪除
DDb = [FMDatabase databaseWithPath:path]; [self createTable:@"95230"]; //建表
[self insertDate:@"95230"]; //添加數據
[self updataWithTable:@"95230"]; //修改
[self deledataWith:@"95230"]; //刪除
[self chaxunWith:@"95230"]; //查詢
NSLog(@"%@/Documents",NSHomeDirectory()); //模擬器運行時 打開Documents查看數據庫文件
//查詢數據庫
-(void)chaxunWith:(NSString *)tabname { if ([DDb open]) { // NSString *sql = [NSString stringWithFormat:@"select * from '%@' where age = '%@'",tabname,@"18"];// NSString *sql = [NSString stringWithFormat:@"select * from '%@'",tabname]; FMResultSet * rs = [DDb executeQuery:sql]; while ([rs next]) { NSString * name = [rs stringForColumn:@"name"]; int age = [rs intForColumn:@"age"]; NSData *imgdata = [rs dataForColumn:@"image"]; NSLog(@"%@ - %i",name,age); } [DDb close]; } } //刪除數據
-(void)deledataWith:(NSString *)tabname { if ([DDb open]) { NSString *sql = [NSString stringWithFormat:@"delete from '%@' where %@ = '%@'",tabname,@"age",@"19"]; BOOL dele = [DDb executeUpdate:sql]; if (!dele) { NSLog(@"delete fail"); } [DDb close]; } } //修改數據
-(void)updataWithTable:(NSString *)tabname { if ([DDb open]) { NSString *sql = [NSString stringWithFormat:@"update '%@' set %@ = '%@' where age = '%@'",tabname,@"name",@"張86",@"18"]; BOOL update =[DDb executeUpdate:sql]; if (!update) { NSLog(@"update fail"); } [DDb close]; } } //添加數據
-(void)insertDate:(NSString *)tabname { if ([DDb open]) { NSString *bb = [NSString stringWithFormat:@"INSERT INTO '%@' (name, age, image) VALUES (?,?,?)",tabname]; // UIImage *img = [UIImage imageNamed:@"test"]; // NSData *imgdata = UIImagePNGRepresentation(img);
BOOL insert = [DDb executeUpdate:bb,@"小三",@"20",[NSData data]]; if (!insert) { NSLog(@"insert fail"); } [DDb close]; } } //建立數據庫表格
-(void)createTable:(NSString *)tabname { if ([DDb open]) { //判斷表名是否爲純數字
NSString *sqlCreateTable = [NSString stringWithFormat:@"create table if not exists '%@' (id INTEGER PRIMARY KEY AUTOINCREMENT, name text,age integer, image blob)",tabname]; BOOL res = [DDb executeUpdate:sqlCreateTable]; if (!res) { NSLog(@"建立表格失敗"); } [DDb close]; } } //建立數據庫
-(NSString *)getDBPath:(NSString *)curname { curname = [NSString stringWithFormat:@"%@.sqlite",curname]; NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; NSString *DBPath = [documentPath stringByAppendingPathComponent:curname]; return DBPath; }
注:FMDB寫入圖片數據NSData時候,圖片轉換成數據流用 UIImageJPEGRepresentation( img , float); 若是用 UIImagePNGRepresentation轉的話,寫入數據庫時間會變長,數據庫
我5張圖片沒有壓縮轉 寫入數據庫時間須要花費1.5秒,並且是寫入任何一個參數都要1.5秒。spa
>>>>> 其餘比較詳細的FMDB使用介紹。.net
=====> http://m.blog.csdn.net/article/details?id=7204625code
O(∩_∩)Oorm