iOS 数据储存--SQLite 操作数据库-FMDB,sqlite数据类型,保存图片,demo
2017-05-25 13:37
579 查看
1、SQLite 语句中 数据类型的储存
/* 不区分大小写
char(长度)。字符串
NULL. 空值
INTEGER. 整型
REAL.浮点型
TEXT.文本类型
BLOB. 二进制类型,用来存储文件,比如图片。
2、通过单利 操作数据库保存 :Id Name UIImage .h+.m
.m
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #4dbf56 }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px "PingFang SC"; color: #4dbf56 }
span.s1 { color: #ffffff }
span.s2 { }
span.s3 { font: 11.0px "PingFang SC" }
span.s4 { font: 11.0px Menlo }
/* 不区分大小写
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
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #4dbf56 }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px "PingFang SC"; color: #4dbf56 }
span.s1 { color: #ffffff }
span.s2 { }
span.s3 { font: 11.0px "PingFang SC" }
span.s4 { font: 11.0px Menlo }
相关文章推荐
- IOS-20-数据库操作之(SQLite第三方封装库FMDB)的基础入门使用及demo源码
- ios sqlite 第三方FMDB框架操作数据库
- iOS数据库开发之SQLite和FMDB详解(附Demo)
- android创建数据库(SQLite)保存图片示例ZZ 分类: Android数据存储 2015-03-22 09:58 41人阅读 评论(0) 收藏
- IOS-19-数据库操作之(SQLite)的基础入门使用及demo源码
- iOS的sqlite3大量数据插入数据库操作
- IOS 之使用FMDB进行SQLite数据库操作——表的创建与修改,以及数据的增删改查和多线程操作数据库
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- Android IOS SQLite 数据库 数据类型
- iOS基础——数据操作之Sqlite3、FMDB
- python 打开sqlite3内存数据库,操作完毕将数据保存到文件数据库
- 游戏服务器中的数据库异步操作技术和游戏数据的保存机制
- 用C#编程从数据库中读取图片数据导进Excel文件的方法(如何从数据库中读取保存的文件,直接打开,中间不保存到本地)
- 为了方便维护,以后无论如何,数据库操作一定使用封装的强类型,或者自己封装的数据操作类。后记,使用分布式查询解决多个数据库之间的查询操作。
- 13—(保存游戏数据 [下文])详解SQLite存储方式,并把SQLite的数据库文件存储在SD卡中
- 【数据库】SQL Server中的Image数据类型的操作
- 【Android游戏开发十三】(保存游戏数据 [下文])详解SQLite存储方式,并把SQLite的数据库文件存储在SD卡中!!!
- 【数据库】 sqlite3数据类型和函数
- 游戏服务器中的数据库异步操作技术和游戏数据的保存机制