iOS开发之--FMDB的使用
在很多时候,我们会用到数据库,我们移动端使用的数据库,一般都是嵌入型数据库,是一种较轻型的数据库,
一般很多时候,大牛封装的FMDB的第三方,已经足够满足我们的需求了!
现在分享一下自己的学习心得,希望能帮到大家!
一、简要说明
1.什么是FMDB
FMDB是IOS平台的SQLite数据库框架
FMDB是以OC的方式封装了SQLite的C语言API
2.FMDB的优点
使用起来更加面向对象,省去了很多麻烦、冗余的C语言代码
对比苹果自带的Coredata框架,更加的轻量级和灵活
提供了多线程安全的数据库操作方法,有效地防止数据混乱
3.FMDB的github地址
二、核心类
FMDB有三个主要的类
(1)FMDatabase
一个FMDatabase对象就代表一个单独的SQLite数据库
用来执行SQL语句
(2)FMResultSet
使用FMDatabase执行查询后的结果集
(3)FMDatabaseQueue
用于在多线程中执行多个查询或更新,它是线程安全的
三、FMDB使用步骤
下载FMDB文件,并将FMDB文件夹添加到项目中去(也可使用cocoapods导入)
导入libsqlite3.0框架,导入头文件
FMDatabase.h
代码实现,与SQLite使用步骤相似,创建数据库路径,获得数据库路径,打开数据库,然后对
数据库进行增、删、改、查操作,最后关闭数据库。
创建FMDatabase对象是参数为SQLite数据库文件路径,该路径可以是一下三种方式之一
文件路径,该文件路径无需真实存在,如果不存在会自动创建
空字符串(@“”)。表示会在临时目录创建一个空的数据库,当FMDatabase连接关闭时,文件也会被删除
NULL。将创建一个内在数据库,同样的,当FMDatabase连接关闭时,数据将会被销毁
我自己使用的数据模型:
@property(nonatomic,assign)int ID;//id
@property(nonatomic,strong)NSString *name;//name
@property(nonatomic,strong)NSString *age;//age
我自己使用的工具类:
.h
#import <Foundation/Foundation.h> @interface DataBaseTools : NSObject //创建一个单例类
+(instancetype)sharedManager; //初始化数据库
-(void)initDataBase; //插入数据
-(void)insert; //删除数据
-(void)deletesWithByids:(NSString *)ida; //查询数据
-(NSMutableArray *)queryWithByids:(int)ida; //彻底销毁的操作
-(void)allRemovesDatas; @end
.m
#import "DataBaseTools.h"
#import "FMDB.h"
#import "FMDatabase.h"
#import "FMModel.h" FMDatabase *__db = nil; @implementation DataBaseTools //创建一个单例类
+(instancetype)sharedManager
{
static DataBaseTools *dataBase = nil;
static dispatch_once_t once_Token;
dispatch_once(&once_Token ,^{
dataBase = [[self alloc]init];
});
return dataBase;
} //初始化数据库
-(void)initDataBase
{
//获取数据库文件路径 不一定真实,也可以为空,如果为空就创建
NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
NSString *fileName = [doc stringByAppendingPathComponent:@"student.sqlite"]; //获得数据库
FMDatabase *db = [FMDatabase databaseWithPath:fileName]; //打开数据库
if ([db open]) {
//有就打开,没有就创建
BOOL result = [db executeUpdate:@"CREATE TABLE IF NOT EXISTS t_student (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL, age integer NOT NULL);"];
if (result) {
NSLog(@"创建成功");
}else
{
NSLog(@"创建失败");
}
__db = db;
}
} //插入数据
-(void)insert
{
for (int i = ; i<; i++) {
NSString *names = [NSString stringWithFormat:@"h_Jack%d",arc4random_uniform()]; //不确定的参数用?来占位
[__db executeUpdate:@"INSERT INTO t_student (name, age) VALUES (?, ?);",names,@(arc4random_uniform())];
}
} //删除数据
-(void)deletesWithByids:(NSString *)ida
{
//删除固定的一个数值
// NSString *nameStr = @"h_Jack35";
[__db executeUpdate:@"delete from t_student where name = ?;",ida]; // [__db executeUpdate:@"delete from t_student where age = ?;",ida]; } //查询数据
-(NSMutableArray *)queryWithByids:(int)ida
{
//执行查询语句--查询整个表
FMResultSet *resultSet = [__db executeQuery:@"select * from t_student"]; //根据条件查询
FMResultSet *resultSets = [__db executeQuery:@"select * from t_student where id > ?",[NSString stringWithFormat:@"%d",ida]]; NSMutableArray *array = [NSMutableArray arrayWithCapacity:]; //遍历结果
while ([resultSets next]) {
FMModel *model = [FMModel new];
model.ID = [resultSets intForColumn:@"id"];
model.name = [resultSets stringForColumn:@"name"];
model.age = [resultSets stringForColumn:@"age"];
[array addObject:model];
}
[resultSets close]; return array;
} //彻底销毁的操作
-(void)allRemovesDatas
{
//如果表格存在,则销毁
[__db executeUpdate:@"drop table if exists t_student"];
}
上面的操作增、删、改、查都有,
四、在tableview里面展示插入的数据,然后我做了一个左滑删除的操作,具体代码如下:
//添加
-(void)insertClick
{
[[DataBaseTools sharedManager] insert];
} //查找
-(void)insertsClick
{
self.oneArray = [[DataBaseTools sharedManager] queryWithByids:[TF1.text intValue]];
[self.tableView reloadData];
NSLog(@"--array is %@",self.oneArray);
} -(void)creatTableView
{
self.tableView = [[UITableView alloc]initWithFrame:CGRectMake(, , self.view.frame.size.width, self.view.frame.size.height) style:UITableViewStylePlain];
self.tableView.delegate = self;
self.tableView.dataSource = self;
self.tableView.tableFooterView = [[UIView alloc]init];
[self.tableView registerNib:[UINib nibWithNibName:@"FmCell" bundle:nil] forCellReuseIdentifier:@"FmCell"];
[self.view addSubview:self.tableView];
} -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.oneArray.count;
} -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return ;
} -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
FmCell *cell = [tableView dequeueReusableCellWithIdentifier:@"FmCell"forIndexPath:indexPath];; FMModel *model = self.oneArray[indexPath.row]; cell.IDlab.text = [NSString stringWithFormat:@"%d",model.ID];
cell.nameLab.text = model.name;
cell.ageLab.text = model.age; return cell;
} -(NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath
{
return @"删除";
} -(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
return UITableViewCellEditingStyleDelete;
} - (nullable NSArray<UITableViewRowAction *> *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(8_0) __TVOS_PROHIBITED
{
UITableViewRowAction* deleteAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleNormal title:@"删除" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {
//这里面写点击按钮的所响应的事件
FMModel *model = self.oneArray[indexPath.row];
NSLog(@"----%@--%ld",model.name,indexPath.row);
[[DataBaseTools sharedManager] deletesWithByids:model.name];
[self.oneArray removeObjectAtIndex:indexPath.row];
[self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
[self.tableView reloadData]; }]; deleteAction.backgroundColor = [UIColor redColor]; return @[deleteAction]; }
最终效果图如下:
左滑删除后,数据直接从数据库里面删除!
iOS开发之--FMDB的使用的更多相关文章
- iOS开发 数据库FMDB
iOS开发 数据库FMDB 1.简介 需求作用: 如果需要保存大量的结构较为复杂的数据时候, 使用数据库, 例如交规考试项目 常用的数据库: (1)Microsoft SQL Server 2000 ...
- iOS开发数据库-FMDB
前言 FMDB是以OC的方式封装了SQLite的C语言API,使用起来更加面向对象,省去了很多麻烦.冗余的C语言代码:对比苹果自带的Core Data框架,更加轻量级和灵活:提供了多线程安全的数据库操 ...
- iOS开发中FMDB的使用
1.什在日常的开发中,我们需要用到离线缓存将数据信息存入数据库,在没有网络的时候进行加载,而我们IOS用的就是sqlite3数据库,用原生的sql我们也能实现,但是书写起来比较麻烦,尤其是其它语言转过 ...
- IOS开发——使用数据库
IOS开发——使用FMDB数据库 简介 需求作用: 如果需要保存大量的结构较为复杂的数据的时候,使用数据库,例如交规考试项目 1.数据库的基本介绍 数据库(DB)是一种数据模型组织起来并存放存储管理的 ...
- iOS开发数据库篇—FMDB简单介绍
iOS开发数据库篇—FMDB简单介绍 一.简单说明 1.什么是FMDB FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 2.FMDB的优点 使用起来 ...
- iOS开发数据库篇—FMDB数据库队列
iOS开发数据库篇—FMDB数据库队列 一.代码示例 1.需要先导入FMDB框架和头文件,由于该框架依赖于libsqlite库,所以还应该导入该库. 2.代码如下: // // YYViewContr ...
- 在iOS开发中使用FMDB
在iOS开发中使用FMDB 前言 SQLite (http://www.sqlite.org/docs.html) 是一个轻量级的关系数据库.iOS SDK 很早就支持了 SQLite,在使用时,只需 ...
- 【转】在iOS开发中使用FMDB
本文转载自:唐巧的博客 在iOS开发中使用FMDB APR 22ND, 2012 前言 SQLite (http://www.sqlite.org/docs.html) 是一个轻量级的关系数据库.iO ...
- iOS开发系列--数据存取
概览 在iOS开发中数据存储的方式可以归纳为两类:一类是存储为文件,另一类是存储到数据库.例如前面IOS开发系列-Objective-C之Foundation框架的文章中提到归档.plist文件存储, ...
随机推荐
- PHP-数据库长连接mysql_pconnect的细节
PHP的MySQL持久化连接,美好的目标,却拥有糟糕的口碑,往往令人敬而远之.这到底是为啥么.近距离观察后发现,这家伙也不容易啊,要看Apache的脸色,还得听MySQL指挥. 对于作为Apache模 ...
- C#处理和对接HTTP接口请求
对于现在接口泛滥的时代,了解和处理接口对于一名程序员来说是很有必要的! 在对接时对于对方发过来的文档,需要认真看一遍,有疑问的比如加密等,需特别提出来和对方交接: 第一步,在对接接口时,你应该拿到服务 ...
- EasyUI combobox的panelHeight自动高度
在使用EasyUI的时候,有时会用到combobox组件,这里的记录数不是很固定,设置为auto可能会被挡住,设置固定高度时,option很少时,也很丑 所以这里给出我自己自动调整combobox的p ...
- atitit.高性能遍历 文本文件行 attilax总结
atitit.高性能遍历 文本文件行 attilax总结 文件读写有以下几种常用的方法 1 通常io读取2.5s 1 nio读取或许越高的.. 2 NIO通常采用Reactor模式,AIO通常采用Pr ...
- 使用tc对linux中某ip段限速
TC 无需安装,Linux 内核自带例:将IP地址段192.168.1.0/24 上传下载限速为 5M将以下内容添加到/etc/ppp/ip-up文件exit 0上面. down=5Mbituploa ...
- action(二)
RemoveSelf :消失 CCFiniteTimeAction* action = CCSequence::create( CCMoveBy::create( , ccp(,)), CCRotat ...
- 03、矢量图形查询工具(Symbol Unicode)
目前的软件开发中,很多地方都使用到了矢量图标,在 Metro app 的开发中,可以使用 Windows 系统图标(02.Universal app 中按钮图标使用 ),包括 Segoe UI Sym ...
- ptxdist for sama5d3
http://www.vahanus.net/~csc/scm/ptxdist-at91sama5d3-xpld.git/
- typeof关键字
C语言中 typeof 关键字是用来定义变量数据类型的.在linux内核源代码中广泛使用. 使用方法 1.当x的类型为是 int 时 _min1变量的数据类型则为 int. 2.当x为一个表达式时(例 ...
- spingboot集成jpa(一)
springboot + jpa 练习 spingboot集成jpa(一):最基本的环境搭建 spingboot集成jpa(二):使用单元测试 1. pom.xml中添加依赖 <!-- jdbc ...