封装数据库
1 #import "DBManager.h" 2 #import "FMDatabase.h" 3 @implementation DBManager 4 { 5 FMDatabase *_fmdb; 6 NSLock *_lock; 7 } 8 +(DBManager *)shareManager{ 9 static DBManager *manager=nil; 10 static dispatch_once_t once; 11 dispatch_once(&once, ^{ 12 if (manager==nil) { 13 manager=[[DBManager alloc]init]; 14 } 15 }); 16 return manager; 17 } 18 19 -(id)init{ 20 self=[super init]; 21 if (self) { 22 23 _lock=[[NSLock alloc]init]; 24 25 // [_lock lock]; 加锁 26 // [_lock unlock]; 解锁 27 28 NSString *path=[NSHomeDirectory() stringByAppendingString:@"/Documents/user.db"]; 29 _fmdb=[[FMDatabase alloc]initWithPath:path]; 30 if ([_fmdb open]) { 31 NSString *createSql=@"create table if not exists userInfo(id integer primary key autoincrement,name varchar(256),age integer,image blob)";//创建一个userInfo表,表中有id、name、age、image 四个属性。 blob 是用来存储2进制的。 integer 整型varchar(256) 字符型 32 // create table if not exists 表名(属性 属性的类型,属性 属性的类型) 33 //primary key 主键 autoincrement 自增 34 BOOL success=[_fmdb executeUpdate:createSql]; 35 if (!success) { 36 NSLog(@"create:%@",_fmdb.lastError); 37 } 38 } 39 } 40 return self; 41 } 42 // 插入数据 43 -(void)insertModel:(UserModel *)model{ 44 [_lock lock]; 45 NSString *insertSql=@"insert into userInfo(name,age,image) values(?,?,?)"; 46 //insert into 表名(属性名,属性名) values(?,?) 47 UIImage *image=model.headImage; 48 NSData *data=UIImagePNGRepresentation(image);//UIImagePNGRepresentation 这个方法是可以将png类型的图片转化成 NSData 49 BOOL success=[_fmdb executeUpdate:insertSql,model.name,model.age,data];//executeUpdate 后面需要去接 继承与NSObject类所实例化的对象 否则会抛出EXC_BAD_ACCESS错误 50 if (!success) { 51 NSLog(@"%@",_fmdb.lastError); 52 } 53 [_lock unlock]; 54 } 55 //删除数据 56 -(void)deleteDataWith:(NSNumber *)dataID{ 57 [_lock lock]; 58 NSString *deleteSql=@"delete from userInfo where id=?";// delete from 表名 where 属性=? 59 BOOL success=[_fmdb executeUpdate:deleteSql,dataID]; 60 if (!success) { 61 NSLog(@"%@",_fmdb.lastError); 62 } 63 [_lock unlock]; 64 } 65 66 -(void)updateWith:(UserModel *)model{ 67 [_lock lock]; 68 NSString *updateSql=@"update userInfo set name=?,age=?,image=? where id =?";// update 表名 set 属性名=?,属性名=? where 属性名=? 69 UIImage *image=model.headImage; 70 NSData *data=UIImagePNGRepresentation(image); 71 NSNumber *IDNum=[NSNumber numberWithInteger:[model.id1 integerValue]]; 72 BOOL success=[_fmdb executeUpdate:updateSql,model.name,model.age,data,IDNum]; 73 if (!success) { 74 NSLog(@"%@",_fmdb.lastError); 75 } 76 [_lock unlock]; 77 } 78 79 -(NSArray *)selectAllData{ 80 [_lock lock]; 81 NSString *selSQL=@"select * from userInfo";//* 查找全部 select * from 表名 82 FMResultSet *set=[_fmdb executeQuery:selSQL]; 83 NSMutableArray *array=[[NSMutableArray alloc]init]; 84 while ([set next]) { 85 UserModel *model=[[UserModel alloc]init]; 86 model.name=[set stringForColumn:@"name"]; 87 NSData *data=[set dataForColumn:@"image"]; 88 UIImage *image=[UIImage imageWithData:data];//把NSData类型的数据转化成image 89 model.headImage=image; 90 model.age=[NSNumber numberWithInteger:[[set stringForColumn:@"age"] integerValue]]; 91 [array addObject:model]; 92 } 93 [_lock unlock]; 94 return [array copy]; 95 } 96 // 查找一条语句是否存在 97 -(BOOL)isOrNotIN:(NSNumber *)idOne{ 98 NSString *sql=@"select * from userInfo where id=?";// 99 FMResultSet *set=[_fmdb executeQuery:sql]; 100 return [set next]; 101 } 102 103 104 @end