• 封装数据库


      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
  • 相关阅读:
    C#面向对象五(继承、抽象类和抽象方法、多态、虚方法、is、as、new覆盖关键字)
    C#面向对象四(文件与目录操作、序列化与反序列化、XML)
    C#面向对象三(常用控件)
    C#面向对象二(集合泛型及排序)
    C#面向对象一(方法、封装、类、两种数据类型)
    如何最快找到重点 —— 小小码虫瞎想の效率与绩效篇(一)
    Android Telephony —— 手机信号实时变化源码分析过程记录
    Android 某些配置记录
    Macbook Pro 使用小记
    fhq treap 范浩强平衡树
  • 原文地址:https://www.cnblogs.com/liaods/p/4787591.html
Copyright © 2020-2023  润新知