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
  • 相关阅读:
    Node.js中的Buffer
    移动端页面弹出对话框效果Demo
    简单编写makefile文件,实现GCC4.9编译项目,增加boost库測试等等。。
    Windows下使用静态库
    将 Android* Bullet 物理引擎移植至英特尔&#174; 架构
    Java读书笔记一(异常处理)
    设计模式
    Ignatius and the Princess III(杭电1028)(母函数)
    oracle树操作(select .. start with .. connect by .. prior)
    三期_day02_数据库表设计和开发准备工作
  • 原文地址:https://www.cnblogs.com/xujiahui/p/6903282.html
Copyright © 2011-2022 走看看