zoukankan      html  css  js  c++  java
  • iOS 数据储存--SQLite 操作数据库-FMDB,sqlite数据类型,保存图片,demo

    1、SQLite 语句中 数据类型的储存

            /* 不区分大小写

             char(长度)。字符串

             NULL. 空值

            INTEGER. 整型

            REAL.浮点型

            TEXT.文本类型

            BLOB. 二进制类型,用来存储文件,比如图片。

            

     

    2、通过单利 操作数据库保存 :Id Name  UIImage  .h+.m

     

    #import <Foundation/Foundation.h>
    
    @interface SaveDateToLocal : NSObject
    
    +(SaveDateToLocal*)SaveDateToLocalShare;
    
    
    /**
     添加数据
    
     @param Id id
     @param Image uiimage
     @param Name string
     */
    -(void)SaveDateAddDateWithId:(NSString*)Id ImageviewImage:(UIImage*)Image nickName:(NSString*)Name;
    
    /**
     修改数据
    
     @param Id id
     @param Name name
     @param Image uiimage
     */
    -(void)SaveDatechangeMessageWithId:(NSString*)Id Name:(NSString*)Name  Image:(UIImage *)Image;
    
    /**
     查找数据
    
     @param Id id
     @return 包含数据的字典
     */
    -(NSDictionary*)SaveDatesearchMessageWithId:(NSString*)Id;
    
    /**
     删除数据
    
     @param Id id
     */
    -(void)SaveDatedeleteMessageWithId:(NSString*)Id;
    
    @end

    .m

     
     将图片转化成base64编码格式的字符串,直接以字符串的形式存放入数据库
     存取方法不做过多介绍,上篇已经做过介绍,主要展示以下转化过程:
     
     [html] view plain copy
     //图片转化为base64字符串
     UIImage *originImage = [UIImage imageNamed:@"origin.png"];
     NSData *data = UIImageJPEGRepresentation(originImage, 1.0f);
     NSString *encodedImageStr =[[NSString alloc] initWithData:data  encoding:NSUTF8StringEncoding];;
     NSLog(@"Encoded image:%@", encodedImageStr);
     
     [html] view plain copy
     //base64字符串转化为图片
     NSData *decodedImageData = [@"testdata" dataUsingEncoding:NSUTF8StringEncoding];
     UIImage *decodedImage = [UIImage imageWithData:decodedImageData];
     NSLog(@"Decoded image size: %@", NSStringFromCGSize(decodedImage.size));
    
     
     */
    #import "SaveDateToLocal.h"
    #import <FMDatabase.h>
    
    @implementation SaveDateToLocal
    static SaveDateToLocal * saveDateToLocal =nil;
    static  FMDatabase * dataBase = nil;//静态变量全局使用
    
    +(SaveDateToLocal*)SaveDateToLocalShare{
        
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            
            saveDateToLocal =[[self alloc]init];
            
            
            
            NSString * strpath =[NSHomeDirectory() stringByAppendingPathComponent:@"Documents/userchat.db"];
            
            //创建数据库
            dataBase = [FMDatabase databaseWithPath:strpath];
            //打开数据库
            BOOL ret = [dataBase open];
            if (ret == NO) {
                NSLog(@"数据库打开失败");
            }else{
                NSLog(@"数据库打开成功");
            }
            
            //1.准备sqlite语句
            /* 不区分大小写
             char(长度)。字符串
             NULL. 空值
            INTEGER. 整型
            REAL.浮点型
            TEXT.文本类型
            BLOB. 二进制类型,用来存储文件,比如图片。
            */
            //userchat  数据库名字
            //(Id char(30), Name char(40), Image blob )   数据名字+类型
            NSString *sqlite = @"create table if not exists userchat(Id char(30), Name char(40), Image blob );";
            //2.执行sqlite语句
            
            int result = [dataBase executeUpdate:sqlite];
            //3.sqlite语句是否执行成功
            
            if (result == YES) {
                NSLog(@"创建表成功");
            } else {
                NSLog(@"创建表失败");
            }
    
            
            
        });
        
        
        return saveDateToLocal;
        
    }
    
    //插入数据
    -(void)SaveDateAddDateWithId:(NSString*)Id ImageviewImage:(UIImage*)Image nickName:(NSString*)Name{
        
        //插入之前 先查询有没有 有了就替换
        
        NSDictionary * dict =[self SaveDatesearchMessageWithId:Id];
        
        if (dict) {
            
            //有值  替换/更新
            [self SaveDatechangeMessageWithId:Id Name:Name Image:Image];
            
        }
        else{
        
        
        NSString *sql = @"insert into userchat(Id , Name, Image) values(?, ?, ?);";
        
            //图片转化为data
        NSData *data =UIImageJPEGRepresentation(Image, 1.0);
        
        NSLog(@"Encoded image:%@", data);
        //? 在这里 类似OC中的  %@
        BOOL ret = [dataBase executeUpdate:sql,Id, Name, data];
        if (ret == YES) {
            NSLog(@"插入成功");
        }else{
            
            NSLog(@"插入失败");
        }
    
            
        }
    }
    
    
    -(void)SaveDatechangeMessageWithId:(NSString*)Id Name:(NSString*)Name  Image:(UIImage *)Image
    {
        
        //图片转化为data字符串
        NSData *data =UIImageJPEGRepresentation(Image, 1.0);
        
        
        // 1、创建sql语句
        NSString *sql = @"update userchat set Name =? , Image = ? where Id = ?;";
        // 2、执行sql语句
        BOOL ret = [dataBase executeUpdate:sql, Name,data,Id];
        if (ret == YES) {
            NSLog(@"修改数据成功");
        }
    }
    
    -(NSDictionary*)SaveDatesearchMessageWithId:(NSString*)Id
    {
        
        NSMutableDictionary * dict =[NSMutableDictionary dictionary];
        
        // 1、写sql语句
        NSString *sql = @"select *from userchat where Id = ? ;";
        FMResultSet *set = [dataBase executeQuery:sql,Id];
        //使用while循环
        while ([set next]) {
            //FMResultSet是一个集合,保存所有符合条件的数据
            //next是一个自动循环的指针,调用next可以遍历整个集合
            //当遍历完成以后,next会指向空,循环退出
            
            //将数据从集合中取出
            NSString *name = [set stringForColumn:@"Name"];
            
            if (name.length>0) {
                NSData * image = [set dataForColumn:@"Image"];
                
                //NSData *decodedImageData = [image dataUsingEncoding:NSUTF8StringEncoding];
                UIImage *decodedImage = [UIImage imageWithData:image];
                
                NSDictionary * userchat =@{@"Name":name,@"Image":decodedImage};
                
                [dict setDictionary:userchat];
                
                break ;
    
                
                
            }
            
        }
        
        return dict;
    }
    
    
    -(void)SaveDatedeleteMessageWithId:(NSString*)Id
    {
        NSString *sql = @"delete from userchat where Name = ?;";
        BOOL ret = [dataBase executeUpdate:sql,Id];
        if (ret == YES) {
            NSLog(@"删除成功");
        }else{
            
             NSLog(@"删除shibai");
        }
    }
    @end
  • 相关阅读:
    bzoj 3027 [Ceoi2004]Sweet——生成函数
    bzoj 3028 食物——生成函数
    JZOJ 5461 购物 —— 贪心
    JZOJ 1003 [ 东莞市选 2007 ] 拦截导弹 —— 递推
    JZOJ 1667 ( bzoj 1801 ) [ AHOI 2009 ] 中国象棋 —— DP
    洛谷 P2055 [ ZJOI 2009 ] 假期的宿舍 —— 二分图匹配
    洛谷 P3398 仓鼠找sugar —— 树链剖分
    洛谷 P1083 [ NOIP 2012 ] 借教室 —— 线段树 / 二分差分数组
    bzoj 3895 取石子 —— 博弈论
    洛谷 P1312 [ NOIP 2011 ] Mayan游戏 —— 搜索+模拟
  • 原文地址:https://www.cnblogs.com/xujiahui/p/6903282.html
Copyright © 2011-2022 走看看