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文件存储, ...
随机推荐
- ios开发-Object-C可变参数函数
简介 一个可变参数函数是指一个函数拥有不定的参数,即为一个函数可接收多个参数.有时我们会遇到一些算术问题需要用到,比如是计算传入参数的总和,字符串的连接或是其它操作过程,我们在 OC 里也经常使用,最 ...
- 发现恶意ip大量访问 可使用命令进行封禁
1. vim /etc/sysconfig/iptables 2.添加箭头指向的语句,ip可以替换, 3. 保存后退出 service iptables save 4.重启 service iptab ...
- ceph之查看osd上pg的分布
一.概述 osd上pg的分布决定了数据分布的均匀与否,所以能直观的看到pg到osd的上分布是很有必要的: ceph只身提供了相关的命令: #ceph pg ls-by-osd.{osd_id} #fo ...
- Linux-Vim使用技巧
cd /tmp 切换到/tmp目录下面 vim shijiazhuang.txt 编辑shijiazhuang.txt文件 welcome to shijiazhuang. yu hua qu c ...
- iOS8的一些控件的变更
UISearchDisplayController变更为UISearchController UIAlertView变更为UIAlertController 如果添加点击事件则需要使用UIAlertC ...
- 使用命令行设置树莓派的wifi网络
假设你没有登录到经常使用的图形用户界面.这样的方法就适合用来设置树莓派的wifi.尤其是在你没有屏幕或者有线网络,仅使用串口控制线的时候.另外,这样的方法也不须要额外的软件,全部须要的东西都已经包括进 ...
- some nets were not able to be matched
原因是:PCB画好之后再次更改原理图,将更改后的原理图更新至PCB的时候会导致原理图中新生成的网络和PCB中原有的网络名不匹配 解决办法:PCB---设计----网络表---编辑网络,把PCB中不匹配 ...
- elipse快捷键大全 elipse快捷键详解
1. ctrl+shift+r:打开资源 这可能是所有快捷键组合中最省时间的了.这组快捷键可以让你打开你的工作区中任何一个文件,而你只需要按下文件名或mask名中的前几个字母,比如applic*.xm ...
- vim中不同模式的帮助信息的查找
vim的模式有多种,比如normal(普通模式),insert(插入模式),command(命令行模式),visual(可视化模式).相同的命令和快捷键在不同的模式下功能是不一样的,因此帮助信息也是分 ...
- Atitit. Java script 多重多重catch语句的实现and Javascript js 异常机制
Atitit. Java script 多重多重catch语句的实现and Javascript js 异常机制 1. 语法错误(ERROR)和运行期错误(Exception) 1 2. 错误类型判断 ...