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. HTML5技术分享 ES2017继发与并发

    大家都知道,async函数的返回值是 Promise 对象,这比 Generator 函数的返回值是 Iterator 对象方便多了.你可以用then方法指定下一步的操作. 进一步说,async函数完 ...

  2. 《阿里巴巴Java工作手册》学习笔记

    最近浏览了一下阿里巴巴的Java开发手册,感觉内容确实非常的赞,发现了不少自己在编程中的误区,因此决定通过成文牢固掌握,文中将选取个人认为比较重要的部分进行描述与分析."愿站在巨人的肩膀上, ...

  3. 电商SEO

    大家都知道网站有SEO,电商也有SEO,今天陈晨就带大家来讲讲电商SEO的思路以及电商最重要的选品规划! 1. 选品是核心 2. 挖掘卖点是你走向成功必经之路 3. 产品定价策略---人群画像 4. ...

  4. RecyclerView.ItemDecoration

    decoration 英文意思: 英[ˌdekəˈreɪʃn] 美[ˌdɛkəˈreʃən] n. 装饰品; 装饰,装潢; 装饰图案,装饰风格; 奖章; [例句]The decoration and ...

  5. DOM操作中,遍历动态集合的注意事项。ex: elem.children

    elem.childNodes和elem.children返回的都是动态集合. 动态集合(live collection): 不实际存储元素和属性值 每次访问集合都重新查找DOM树 遍历动态集合:   ...

  6. javaScript基础概念小知识点集

    数据类型 typeof是一个操作符而不是函数,因此例子中圆括号尽管可以使用,但不是必须的. 只要在保存对象的变量还没有真正保存对象,就应该明确的让该变量保存null NaN是一个特殊的数值,与任何值都 ...

  7. ASE加密

    密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.

  8. Js特殊字符转义之htmlEscape()方法

    为了防止XSS攻击,常常需要将用户输入的特殊字符进行转义,原生js貌似还没有直接对其专业的方法,最近再读Js高级程序设计的时候刚好看到,碰巧项目中也刚好需要使用次方法,于是就之家搬来用了. 网上关于转 ...

  9. springboot mybatis redis 二级缓存

    前言 什么是mybatis二级缓存? 二级缓存是多个sqlsession共享的,其作用域是mapper的同一个namespace. 即,在不同的sqlsession中,相同的namespace下,相同 ...

  10. java把html标签字符转普通字符(反转换成html标签)(摘抄)

    下面是java把html标签字符转换,我用了spring 包中的 org.springframework.web.util.HtmlUtils 了解了源代码并且进步了使用,发现写得真不错...同时也可 ...