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. 社群公会GangSDK:程序员入行AI领域需要哪些技能?

    作为一名Android开发工程师,身边总有些同行很焦虑,看着人工智能越来越火,总是担心Android要不行了,所以,我们需要转行么?Android还能走多久?其实,无论是对于Android还是iOS开 ...

  2. python学习笔记 loop&&raw_input 7&& if

    1.首先要说range(x) 其返回的是一个list:[0,1,2,....x-1] >>> range(5) [0,1,2,3,4] 2.Loop 共有两种形式,一种for x i ...

  3. selenium与表格的二三事

    今天遇到的问题是selenium与表格中行和列的问题! 我想要做的事情是统计当前的table有多少行,表格形式如下如所示: 图中所示为2行,我的定位方式是这样的 : table=driver.find ...

  4. tnsping非常慢

    最近给同事虚拟机上安装了一个11g数据库,发现一个奇怪的问题,用windows客户段连接时候非常慢,慢到不能容忍的地步,但是本地os验证登录没有问题,速度非常快,初步定为问题出在监听上,于是我tnsp ...

  5. js学习笔记<拷贝传值,引用传址和匿名函数>

    拷贝传值:把一个变量的值拷贝一份,传给了另外一个变量拷贝传值中,两个变量之间没有任何联系,修改其中一个一个变量的值,原来的变量不变. 例: var arr1 = ["张三",24, ...

  6. Java关键字(一) 修饰符private、protected、public和default的作用域

    我们经常用着四种修饰符去修饰变量.方法和类,但是这四种的作用域都一样吗? 其中private和public可能是最多人知道的,但是protected和default可能就不知道其具体的作用域是哪些范围 ...

  7. 原生javascript选项卡

    js选项卡是一个常用的实现.这里我们将用原生js来将其给予实现. 首先html代码: <div id="container"> <input type=" ...

  8. JavaScript 性能优化技巧分享

    JavaScript 作为当前最为常见的直译式脚本语言,已经广泛应用于 Web 应用开发中.为了提高Web应用的性能,从 JavaScript 的性能优化方向入手,会是一个很好的选择. 本文从加载.上 ...

  9. 关于verilog中语句可不可综合

    1)所有综合工具都支持的结构:always,assign,begin,end,case,wire,tri,aupply0,supply1,reg,integer,default,for,functio ...

  10. 地图开发GIS的应用有哪些?

    GIS的应用领域有哪些? 地理信息系统在最近的30多年内取得了惊人的发展,广泛应用于资源调查.环境评估.灾害预测.国土管理.城市规划.邮电通讯.交通运输.军事公安.水利电力.公共设施管理.农林牧业.统 ...