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