封装数据库

  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

 

posted on 2015-09-06 22:44  Baymax01  阅读(158)  评论(0编辑  收藏  举报

导航