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>) {
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

iOS 数据储存--SQLite 操作数据库-FMDB,sqlite数据类型,保存图片,demo的更多相关文章

  1. Qt之操作数据库(SQLite)实例

    QtSql模块提供了与平台以及数据库种类无关的访问SQL数据库的接口,这个接口由利用Qt的模型视图结构将数据库与用户界面集成的一套类来支持.QSqlDatabase对象象征了数据库的关联.Qt使用驱动 ...

  2. Qt之操作数据库(SQLite)

    SQLite 简介 SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需 ...

  3. IOS 数据储存

    IOS 数据存储 ios数据存储包括以下几种存储机制: 属性列表 对象归档 SQLite3 CoreData AppSettings 普通文件存储 1.属性列表 // //  Persistence1 ...

  4. LKDBHelper Sqlite操作数据库

    首先这里要说明一下,为什么用FMDB而不用Core Data呢,因为我们不知道Core Data是如何映射对象里面的属性关系的,如果我们更改了属性的话,就会报错 首先是创建LKDBHelper对象 L ...

  5. Xamarin.Forms 使用本地数据库之 SQLite

    前言 Xamarin.Forms支持使用SQLite数据库引擎.本文介绍了Xamarin.Forms应用程序如何读取和写入数据到使用SQLite.Net的本地SQLite数据库. 在Xamarin.F ...

  6. 常用数据库2 sqlite及SQL注入

    知识内容: 1.sqlite数据库介绍 2.sqlite数据库操作 3.SQL注入 一.sqlite数据库介绍 1.sqlite数据库 sqlite数据库:轻量级的数据库,一般开发中使用sqlite数 ...

  7. SQLite -附加数据库

    SQLite -附加数据库 考虑情况下当你有多个数据库可用,您希望使用其中任何一个.SQLite附加DTABASE语句用于选择一个特定的数据库,这个命令之后,所有SQLite语句将执行以下附加数据库. ...

  8. iOS数据持久化存储

    本文中的代码托管在github上:https://github.com/WindyShade/DataSaveMethods 相对复杂的App仅靠内存的数据肯定无法满足,数据写磁盘作持久化存储是几乎每 ...

  9. Django中的模型(操作数据库)

    目录 Django配置连接数据库 在Django中操作数据库 原生SQL语句操作数据库 ORM模型操作数据库 增删改查 后台管理 使用后台管理数据库 模型是数据唯一而且准确的信息来源.它包含您正在储存 ...

随机推荐

  1. Java 浏览器兼容模式

    现在设计的东西,很多浏览器不兼容.下面贴出代码.测试在360和IE浏览器下,可以兼容的 <!doctype html><html><head>    <met ...

  2. 实现基于tomcat集群会话保持

    1.实验环境 我们需要准备两台虚拟机,把这两台虚拟机组成集群,实现会话保持. 2.配置server1 2.1 修改nginx配置文件 [root@server1 ~]# vim /etc/nginx/ ...

  3. Vim常用操作-合并行。

    刚接触 Vim 会觉得它的学习曲线非常陡峭,要记住很多命令.所以这个系列的分享,不会教你怎么配置它,而是教你怎么快速的使用它. 在开发时为了代码美观,经常会把属性用换行的方式显示. <el-di ...

  4. SQL---存储过程---存储过程编写案例

    存储过程的创建和调用演示 1.不带参数的存储过程的创建 create procedure PRO_With_No_Param as Begin --begin可省略 select * from sc ...

  5. cardview和Palette,ActionBar颜色随图改变

    CardView是一个控件,Palette是取色工具(工具类),本文会对他们进行比较细致的介绍,相信机制的各位看完一定轻而易举地实现ActionBar随图改变的特效. 首先看一下效果图: Gradle ...

  6. Less的条件表达式

    Less的条件表达式 当需要根据表达式,而不是参数的值或数量进行匹配时,条件表达式(Guards)就显得非常有用.如果你熟悉函数式编程的话,对条件表达式也不会陌生. 为了尽可能地接近CSS的语言结构, ...

  7. Android Lint的使用

    一.概述 Android Lint是在ADT 16(和 Tools 16)引入的一个新工具,可以扫描Android 项目源码中潜在的bug .例如: 缺少翻译(和未使用的翻译)布局性能问题(老的lay ...

  8. windows下python3.6 32bit 安装django

    在Windows下python3.6安装Django1.11.3 1.首先下载地址:https://pypi.python.org/pypi/Django/1.11.3 pip install dja ...

  9. 大道至简第一章Java伪代码读后感

    import.java.大道至简.*; //周爱民 import.java.读后感*; public class shawanyia { //1. 编程的精义 while(山没有消失) {if(愚公没 ...

  10. 用python 抓取B站视频评论,制作词云

    python 作为爬虫利器,与其有很多强大的第三方库是分不开的,今天说的爬取B站的视频评论,其实重点在分析得到的评论化作嵌套的字典,在其中取出想要的内容.层层嵌套,眼花缭乱,分析时应细致!步骤分为以下 ...