zoukankan      html  css  js  c++  java
  • FMDB

    //  DBManager.h
    //  DB
    //
    //  Created by qianfeng on 15/7/22.
    //  Copyright (c) 2015年 张国锋. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    #import "UserModel.h"
    @interface DBManager : NSObject
    
    + (DBManager *)shareManager;
    //- (id)init;
    - (void)insertModel:(UserModel *)model;
    - (void)deleteDataWith:(NSNumber *)dataID;
    - (void)updateWith:(UserModel *)model;
    - (NSArray *)selectAllData;
    - (BOOL)isOrNotIN:(NSNumber *)idOne;
    @end
    
    
    //
    //  DBManager.m
    //  DB
    //
    //  Created by qianfeng on 15/7/22.
    //  Copyright (c) 2015年 张国锋. All rights reserved.
    //
    
    #import "DBManager.h"
    #import "FMDatabase.h"
    @implementation DBManager
    {
        FMDatabase *_fmdb;
        NSLock *_lock;//锁
    }
    
    + (DBManager *)shareManager
    {
        static DBManager *manager =nil;
        static dispatch_once_t once;
        dispatch_once(&once, ^{
            if (manager==nil) {
                manager =[[DBManager alloc]init];
            }
        });
        return manager;
    }
    
    - (id)init
    {
        self =[super init];
        if (self) {
            
        _lock =[[NSLock alloc]init];
    //        [_lock lock];//加锁
    //        
    //        [_lock unlock];//解锁
    //        
            
            NSString *path=[NSHomeDirectory() stringByAppendingString:@"/Documents/user1.db"];
            _fmdb=[[FMDatabase alloc]initWithPath:path];
            if ([_fmdb open]) {
                 NSString *createSql=@"create table if not exists userInfo(id integer primary key autoincrement,name varchar(256),age integer,image blob)";//创建一个userInfo表,blob是用来存储2进制的,如图片
                BOOL success =[_fmdb executeUpdate:createSql]; //增,删,改都用此方法executeUpdate
                if (!success) {
                    NSLog(@"%@",_fmdb.lastError);
                }
            }
            //[_fmdb close];//关闭数据库连接
        }
        return self;
    }
    
    - (void)insertModel:(UserModel *)model
    {
         [_lock lock];
        NSString *insertSql =@"insert into userInfo(name,age,image) values(?,?,?)";
     
        UIImage *image =model.headImage;
        NSData *data =UIImagePNGRepresentation(image);
        //这个方法是可以讲png类型的图片转化成NSData
         
        BOOL success=[_fmdb executeUpdate:insertSql,model.name,model.age,data];
        //executeUpdate 后面需要去接 继承于NSobject类所实例化对象,否则会抛出EXC_BAD_ACCESS 错误
        if (!success) {
            NSLog(@"%@",_fmdb.lastError);
        }
        [_lock unlock];//解锁
        
        //[_fmdb close];
    }
    
    //删除一条数据
    
    - (void)deleteDataWith:(NSNumber *)dataID
    {
         [_lock lock];
        NSString *deleteSql =@"delete from userInfo where id=?"; //? 相当于%@
        BOOL success =[_fmdb executeUpdate:deleteSql,dataID];
        if (!success) {
            NSLog(@"%@",_fmdb.lastError);
        }
        
        [_lock unlock];//解锁
    }
    
    //更新一条数据
    - (void)updateWith:(UserModel *)model
    {
        [_lock lock];
        NSString *updateSql =@"update userinfo set name=?,age=?,image=? where id=?";
        UIImage *image =model.headImage;
        NSData *data =UIImagePNGRepresentation(image);
        NSNumber *IDNum =[NSNumber numberWithInteger:[model.id1 integerValue]];
        BOOL success =[_fmdb executeUpdate:updateSql,model.name,model.age,data,IDNum];
        if (!success) {
           NSLog(@"%@",_fmdb.lastError);
        }
        [_lock unlock];
    }
    
    
    - (NSArray *)selectAllData
    {
        [_lock lock];
        NSString *selSQL =@"select * from userInfo";
        FMResultSet *set = [_fmdb executeQuery:selSQL];
        
        NSMutableArray *array =[NSMutableArray array];
        
        
        while ([set next]) {
            UserModel *model =[[UserModel alloc]init];
            
            model.name=[set stringForColumn:@"name"];//
            
            NSData *data=[set dataForColumn:@"image"];
            
            UIImage *image =[UIImage imageWithData:data];//把NSData类型的数据转化成image
            
            model.headImage=image;
            model.age= [NSNumber numberWithInteger:[[set stringForColumn:@"age"] integerValue]] ;
            
            [array addObject:model];
            
        }
        [_lock unlock];
        return [array copy];
    
    }
    
    //查询一条语句是否存在
    - (BOOL)isOrNotIN:(NSNumber *)idOne
    {
    //
    //  ViewController.m
    //  DB
    //
    //  Created by qianfeng on 15/7/22.
    //  Copyright (c) 2015年 张国锋. All rights reserved.
    //
    
    #import "ViewController.h"
    #import "DetailViewController.h"
    #import "DBManager.h"
     
    @interface ViewController () <UITableViewDelegate,UITableViewDataSource,reloadProtocol>
    {
        UITableView *_tabelView;
        NSMutableArray *_dataArray;
    }
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        [self configUI];
        [self loadData];
        
    }
    
    - (void)loadData
    {
        NSArray *array =[[DBManager shareManager] selectAllData];
        _dataArray =[array mutableCopy];
        [_tabelView reloadData];
    }
    
    - (void)configUI
    {
        self.view.backgroundColor=[UIColor whiteColor];
        
        UIBarButtonItem *bar =[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(push)];
        
        self.navigationItem.rightBarButtonItem=bar;
        
        
        _tabelView= [[UITableView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
        
        _tabelView.delegate=self;
        _tabelView.dataSource=self;
        
        [_tabelView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cell"];
        [self.view addSubview:_tabelView];
        _dataArray =[NSMutableArray array];
        
        
    }
    
    - (void)push
    {
        DetailViewController *vc =[[DetailViewController alloc]init];
       // vc.delegate=self;
        
        vc.rdBlock=^{
            NSArray *array =[[DBManager shareManager] selectAllData];
            _dataArray =[array mutableCopy];
            [_tabelView reloadData]; //可能出现强强引用的问题
        };
        [self.navigationController pushViewController:vc animated:YES];
    }
    
    -(void)reloadDataMath
    {
        NSLog(@"12");
    }
    
    
    
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
       return  _dataArray.count;
    }
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        UITableViewCell *cell =[tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
        
        
        UserModel *model =_dataArray[indexPath.row];
        cell.imageView.image=model.headImage;
        cell.textLabel.text=model.name;
        cell.detailTextLabel.text=[NSString stringWithFormat:@"%@",model.age];
        
        return cell;
        
    }
    
    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        return 100;
    }
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    @end
    
    //  DetailViewController.h
    //  DB
    //
    //  Created by qianfeng on 15/7/22.
    //  Copyright (c) 2015年 张国锋. All rights reserved.
    //
    
    #import <UIKit/UIKit.h>
    
    @protocol reloadProtocol <NSObject>
    
    -(void)reloadDataMath;
    
    @end
    typedef void (^rDBlock)();
    
    @interface DetailViewController : UIViewController
    @property (nonatomic,strong) rDBlock rdBlock;
    
    @property (nonatomic,assign) id <reloadProtocol>delegate;
    @end
    
    
    
    //
    //  DetailViewController.m
    //  DB
    //
    //  Created by qianfeng on 15/7/22.
    //  Copyright (c) 2015年 张国锋. All rights reserved.
    //
    
    #import "DetailViewController.h"
    #import "GFControl.h"
    #import "DBManager.h"
    #import <MobileCoreServices/MobileCoreServices.h>
    @interface DetailViewController () <UIActionSheetDelegate,UINavigationControllerDelegate,UIImagePickerControllerDelegate>
    {
        UITextField *_nameField;
        UITextField *_ageField;
        UIButton *_headImage;//头像
        UIImage *_image;
        
    }
    @end
    
    @implementation DetailViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
       
        self.view.backgroundColor =[UIColor whiteColor];
        [self configUI];
    }
    
    - (void)configUI
    {
        CGFloat width=self.view.frame.size.width;
        UILabel *nameLabel =[GFControl createLabelWithFontSize:18 WithFrame:CGRectMake(30, 100, 80, 30) WithText:@"姓名"];
        [self.view addSubview:nameLabel];
        _nameField=[GFControl createTextFieldWithFrame:CGRectMake(120, 100, width-120-30, 30)];
        [self.view  addSubview:_nameField];
        
        
        
        UILabel *ageLabel=[GFControl createLabelWithFontSize:18 WithFrame:CGRectMake(30, 150, 80, 30) WithText:@"年龄"];
        [self.view addSubview:ageLabel];
        
        _ageField=[GFControl createTextFieldWithFrame:CGRectMake(120, 150, width-120-30, 30)];
        [self.view  addSubview:_ageField];
        
        UILabel *headLabel =[GFControl createLabelWithFontSize:18 WithFrame:CGRectMake(30, 200, 80, 30) WithText:@"头像"];
        [self.view addSubview:headLabel];
        
        
        _headImage =[[UIButton alloc]initWithFrame:CGRectMake(120+(width-120-30-150)/2.0, 200, 150, 150)];
        
        _headImage.backgroundColor =[UIColor yellowColor];
        [_headImage addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
        [self.view addSubview:_headImage];
        
        UIButton *btn =[[UIButton alloc]initWithFrame:CGRectMake(100, 500, 200, 200)];
        [btn setTitle:@"完成" forState:UIControlStateNormal];
        [btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
        [btn addTarget:self action:@selector(pop) forControlEvents:UIControlEventTouchUpInside];
        
        [self.view addSubview:btn];
    }
    
    
    - (void)pop
    {
        UserModel *model =[[UserModel alloc]init];
        model.name=_nameField.text;
        model.age=[NSNumber numberWithInteger:[_ageField.text integerValue]];
        model.headImage=_image;
            
       // [_delegate reloadDataMath];//代理
       
        
        [[DBManager shareManager] insertModel:model];
        
        
         _rdBlock();
        [self.navigationController popViewControllerAnimated:YES];
    }
    
    - (void)btnClick:(UIButton *)btn
    {
        NSLog(@"2");
        
        UIActionSheet *acSheet=[[UIActionSheet alloc]initWithTitle:@"选择图片来源" delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:nil otherButtonTitles:@"相册",@"相机", nil];
        
        [acSheet showInView:self.view];
    }
    
    - (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
    {
        if (buttonIndex==0) {
            
    //        NSLog(@"调用相册");
            
            if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {
                //isSourceTypeAvailable yes:可以调用 NO 不可调用
               // UIImagePickerControllerSourceTypePhotoLibrary 调用相册 UIImagePickerControllerSourceTypeCamera 掉用相机
                
                UIImagePickerController *pick =[[UIImagePickerController alloc]init];
                
                //第二步:实例化 UIImagePickerController
                pick.sourceType=UIImagePickerControllerSourceTypePhotoLibrary;// 第三步,告诉pick对象调用的是系统的相册
                
                pick.delegate=self;//第四步,设置代理
                
                pick.allowsEditing=YES;//第五步,自动修图
                
                
                [self presentViewController:pick animated:YES completion:^{}];
            }
            else
            {
                NSLog(@"调用相机失败");
            }
            
        }else if(buttonIndex ==1)
        {
    //        NSLog(@"调用相机");
        }
    }
    
    
    
    - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
    {
        NSLog(@"%@",info);
        NSString *mediaType =[info objectForKey:UIImagePickerControllerMediaType];
        if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) {
            [_headImage setImage:[info objectForKey:UIImagePickerControllerEditedImage] forState:UIControlStateNormal];
            _image=[info objectForKey:UIImagePickerControllerEditedImage];
        }
        [picker dismissViewControllerAnimated:YES completion:nil];
    }
    - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
    {
       // [self dismissViewControllerAnimated:YES completion:nil];
          [picker dismissViewControllerAnimated:YES completion:nil];
    }
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    /*
    #pragma mark - Navigation
    
    // In a storyboard-based application, you will often want to do a little preparation before navigation
    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
        // Get the new view controller using [segue destinationViewController].
        // Pass the selected object to the new view controller.
    }
    */
    
    @end
    
    NSString *sql =@"select * from userInfo where id =?"; FMResultSet *set = [_fmdb executeQuery:sql,idOne]; return [set next]; } @end
  • 相关阅读:
    创建类以及引用一个类
    修改hosts文件
    微信第三方登录接口开发
    Android定位
    Leetcode 102. Binary Tree Level Order Traversal
    Leetcode 725. Split Linked List in Parts
    Leetcode 445. Add Two Numbers II
    Leetcode 328. Odd Even Linked List
    Leetcode 237. Delete Node in a Linked List
    Leetcode 234. Palindrome Linked List
  • 原文地址:https://www.cnblogs.com/0515offer/p/4696302.html
Copyright © 2011-2022 走看看