FMDB基本操作
1、以前使用数据库,因为一般就建立一张表,所以都是自己写代码创建,没用过fmdb,这次因为项目中涉及聊天模块,需要多张表格和数据库保存聊天记录
按照以前方法不好操作,就研究了下fmdb,发现确实挺方便的。FMDB下载地址:https://github.com/ccgus/fmdb。
2、导入FMDB文件,再导入libsqlite3.tbd依赖包。
//创建打开数据库
NSString *path = [self getDBPath:@"student"];//如果名称为空 数据库断开时会删除
DDb = [FMDatabase databaseWithPath:path]; [self createTable:@""]; //建表
[self insertDate:@""]; //添加数据
[self updataWithTable:@""]; //修改
[self deledataWith:@""]; //删除
[self chaxunWith:@""]; //查询 NSLog(@"%@/Documents",NSHomeDirectory()); //模拟器运行时 打开Documents查看数据库文件
//查询数据库
-(void)chaxunWith:(NSString *)tabname
{
if ([DDb open]) {
// NSString *sql = [NSString stringWithFormat:@"select * from '%@' where age = '%@'",tabname,@"18"];//
NSString *sql = [NSString stringWithFormat:@"select * from '%@'",tabname];
FMResultSet * rs = [DDb executeQuery:sql];
while ([rs next]) {
NSString * name = [rs stringForColumn:@"name"];
int age = [rs intForColumn:@"age"];
NSData *imgdata = [rs dataForColumn:@"image"];
NSLog(@"%@ - %i",name,age);
}
[DDb close];
}
} //删除数据
-(void)deledataWith:(NSString *)tabname
{
if ([DDb open]) {
NSString *sql = [NSString stringWithFormat:@"delete from '%@' where %@ = '%@'",tabname,@"age",@""];
BOOL dele = [DDb executeUpdate:sql];
if (!dele) {
NSLog(@"delete fail");
}
[DDb close];
}
} //修改数据
-(void)updataWithTable:(NSString *)tabname
{
if ([DDb open]) {
NSString *sql = [NSString stringWithFormat:@"update '%@' set %@ = '%@' where age = '%@'",tabname,@"name",@"张86",@""];
BOOL update =[DDb executeUpdate:sql];
if (!update) {
NSLog(@"update fail");
}
[DDb close];
}
} //添加数据
-(void)insertDate:(NSString *)tabname
{
if ([DDb open])
{
NSString *bb = [NSString stringWithFormat:@"INSERT INTO '%@' (name, age, image) VALUES (?,?,?)",tabname];
// UIImage *img = [UIImage imageNamed:@"test"];
// NSData *imgdata = UIImagePNGRepresentation(img);
BOOL insert = [DDb executeUpdate:bb,@"小三",@"",[NSData data]];
if (!insert) {
NSLog(@"insert fail");
}
[DDb close];
}
}
//创建数据库表格
-(void)createTable:(NSString *)tabname
{
if ([DDb open]) {
//判断表名是否为纯数字
NSString *sqlCreateTable = [NSString stringWithFormat:@"create table if not exists '%@' (id INTEGER PRIMARY KEY AUTOINCREMENT, name text,age integer, image blob)",tabname]; BOOL res = [DDb executeUpdate:sqlCreateTable];
if (!res) {
NSLog(@"创建表格失败");
}
[DDb close];
}
} //创建数据库
-(NSString *)getDBPath:(NSString *)curname
{
curname = [NSString stringWithFormat:@"%@.sqlite",curname];
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:];
NSString *DBPath = [documentPath stringByAppendingPathComponent:curname];
return DBPath;
}
注:FMDB写入图片数据NSData时候,图片转换成数据流用 UIImageJPEGRepresentation( img , float); 如果用 UIImagePNGRepresentation转的话,写入数据库时间会变长,
我5张图片没有压缩转 写入数据库时间需要花费1.5秒,而且是写入任何一个参数都要1.5秒。
>>>>> 其他比较详细的FMDB使用介绍。
=====> http://m.blog.csdn.net/article/details?id=7204625
O(∩_∩)O
FMDB基本操作的更多相关文章
- FMDB 的基本操作
在FMDB下载文件后,工程中必须导入如下文件,并使用 libsqlite3.dylib 依赖包 FMDB同时兼容ARC和非ARC工程,会自动根据工程配置来调整相关的内存管理代码. FMDB常用类: F ...
- fmdb 数据库的基本操作
/** * 创建表 */ - (void)createTable { //1.初始化数据库对象 并且 2.打开数据库 BOOL isOpenSuccess = [self.database open ...
- FMDB的一些基本操作小结
http://blog.csdn.net/iunion/article/details/7204625 仅供自己记录使用, h文件 #import <Foundation/Foundation. ...
- FMDB 排它锁
-------------------------------------基本操作------------------------------------- #import "ViewCon ...
- 我为什么用 SQLite 和 FMDB 而不用 Core Data
凭良心讲,我不能告诉你不去使用Core Data.它不错,而且也在变好,并且它被很多其他Cocoa开发者所理解,当有新人加入你的组或者需要别人接手你的项目的时候,这点很重要.更重要的是,不值得花时间和 ...
- FMDB 二次封装工具类,让你快速学会封装,集成数据库
来源:StrivEver 链接:http://www.jianshu.com/p/4c77aee0b41c 上个版本为了增加用户体验,部分页面集成了离线缓存数据功能,于是就在项目里使用了数据库管理离线 ...
- 谈谈用SQLite和FMDB而不用Core Data
谈谈用SQLite和FMDB而不用Core Data 发布于:2014-04-22 11:22阅读数:4235 凭良心讲,我不能告诉你不去使用Core Data.它不错,而且也在变好,并且它被很多其他 ...
- 从FMDB到WCDB、微信团队怎么说?
WCDB背景 自己初次见到WCDB是微信开发团队公众号在今年五月份推送的一篇文章中(开发者团队的微信号上面图片中有,值得大家关注一下),那时候就说在筹备着WCDB的开源,觉得很是新奇,在两个多月前WC ...
- 一行代码实现FMDB的CURD操作
上次实现FMDB的CURD基本操作后,用在项目里,每个实体类都要写SQL语句来实现创建表和CURD操作,总觉得太麻烦,然后就想着利用反射和kvc来实现一个数据库操作的基类继承一下,子类只需要继承,然后 ...
随机推荐
- Python2.7-weakref
weakref 模块,允许创建对象的弱引用,被弱引用的对象其引用计数不变,对象的引用计数为0时就会被垃圾清理机制释放内存空间,此时对其的弱引用也会失效.在对象会被交叉引用,需要释放内存空间时常用. 模 ...
- 理解ASP.NET的IDataReader
理解ASP.NET的IDataReader ADO.NET DataReader对象可以从数据库中检索只读.只进的数据流.因为每次在内存中的数据只有一行,所以使用DataReader可提高应用程序的性 ...
- mysql show profiles 使用分析sql 性能
Show profiles是5.0.37之后添加的,要想使用此功能,要确保版本在5.0.37之后. 查看一下我的数据库版本 MySQL> Select version(); +-------- ...
- 20155220 Exp9 Web安全基础实践
Exp9 Web安全基础实践 实验过程 开启webgoat 输入java -jar webgoat-container-7.1-exec.jar,来运行webgoat 在浏览器输入localhost: ...
- WPF的DataTrigger绑定自身属性
原文:WPF的DataTrigger绑定自身属性 <DataTrigger Binding="{Binding RelativeSource={RelativeSource self} ...
- spring配置多个事务管理器
<tx:annotation-driven/> <bean id="transactionManager1" class="org.springfram ...
- 巧用cheerio重构grunt-inline
grunt-inline是楼主之前写的一个插件,主要作用是把页面带了__inline标记的资源内嵌到html页面去.比如下面的这个script标签. <script src="main ...
- "Regressing Robust and Discriminative 3D Morphable Models with a very Deep Neural Network" 解读
简介:这是一篇17年的CVPR,作者提出使用现有的人脸识别深度神经网络Resnet101来得到一个具有鲁棒性的人脸模型. 原文链接:https://www.researchgate.net/publi ...
- Python3.7 + jupyter安装(CentOS6.5)
Python3.7 + jupyter安装(CentOS6.5) 方法一(anaconda): anaconda是一个开源的Python发行版本 包含conda,python等大量的科学包以及依赖 优 ...
- Flink standalone模式作业执行流程
宏观流程如下图: client端 生成StreamGraph env.addSource(new SocketTextStreamFunction(...)) .flatMap(new FlatMap ...