在很多时候,我们会用到数据库,我们移动端使用的数据库,一般都是嵌入型数据库,是一种较轻型的数据库,

一般很多时候,大牛封装的FMDB的第三方,已经足够满足我们的需求了!

现在分享一下自己的学习心得,希望能帮到大家!

一、简要说明

1.什么是FMDB

FMDB是IOS平台的SQLite数据库框架

FMDB是以OC的方式封装了SQLite的C语言API

2.FMDB的优点

使用起来更加面向对象,省去了很多麻烦、冗余的C语言代码

对比苹果自带的Coredata框架,更加的轻量级和灵活

提供了多线程安全的数据库操作方法,有效地防止数据混乱

3.FMDB的github地址

https://github.com/ccgus/fmdb

二、核心类

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的使用的更多相关文章

  1. iOS开发 数据库FMDB

    iOS开发  数据库FMDB 1.简介 需求作用: 如果需要保存大量的结构较为复杂的数据时候, 使用数据库, 例如交规考试项目 常用的数据库: (1)Microsoft SQL Server 2000 ...

  2. iOS开发数据库-FMDB

    前言 FMDB是以OC的方式封装了SQLite的C语言API,使用起来更加面向对象,省去了很多麻烦.冗余的C语言代码:对比苹果自带的Core Data框架,更加轻量级和灵活:提供了多线程安全的数据库操 ...

  3. iOS开发中FMDB的使用

    1.什在日常的开发中,我们需要用到离线缓存将数据信息存入数据库,在没有网络的时候进行加载,而我们IOS用的就是sqlite3数据库,用原生的sql我们也能实现,但是书写起来比较麻烦,尤其是其它语言转过 ...

  4. IOS开发——使用数据库

    IOS开发——使用FMDB数据库 简介 需求作用: 如果需要保存大量的结构较为复杂的数据的时候,使用数据库,例如交规考试项目 1.数据库的基本介绍 数据库(DB)是一种数据模型组织起来并存放存储管理的 ...

  5. iOS开发数据库篇—FMDB简单介绍

    iOS开发数据库篇—FMDB简单介绍 一.简单说明 1.什么是FMDB FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 2.FMDB的优点 使用起来 ...

  6. iOS开发数据库篇—FMDB数据库队列

    iOS开发数据库篇—FMDB数据库队列 一.代码示例 1.需要先导入FMDB框架和头文件,由于该框架依赖于libsqlite库,所以还应该导入该库. 2.代码如下: // // YYViewContr ...

  7. 在iOS开发中使用FMDB

    在iOS开发中使用FMDB 前言 SQLite (http://www.sqlite.org/docs.html) 是一个轻量级的关系数据库.iOS SDK 很早就支持了 SQLite,在使用时,只需 ...

  8. 【转】在iOS开发中使用FMDB

    本文转载自:唐巧的博客 在iOS开发中使用FMDB APR 22ND, 2012 前言 SQLite (http://www.sqlite.org/docs.html) 是一个轻量级的关系数据库.iO ...

  9. iOS开发系列--数据存取

    概览 在iOS开发中数据存储的方式可以归纳为两类:一类是存储为文件,另一类是存储到数据库.例如前面IOS开发系列-Objective-C之Foundation框架的文章中提到归档.plist文件存储, ...

随机推荐

  1. PHP-数据库长连接mysql_pconnect的细节

    PHP的MySQL持久化连接,美好的目标,却拥有糟糕的口碑,往往令人敬而远之.这到底是为啥么.近距离观察后发现,这家伙也不容易啊,要看Apache的脸色,还得听MySQL指挥. 对于作为Apache模 ...

  2. C#处理和对接HTTP接口请求

    对于现在接口泛滥的时代,了解和处理接口对于一名程序员来说是很有必要的! 在对接时对于对方发过来的文档,需要认真看一遍,有疑问的比如加密等,需特别提出来和对方交接: 第一步,在对接接口时,你应该拿到服务 ...

  3. EasyUI combobox的panelHeight自动高度

    在使用EasyUI的时候,有时会用到combobox组件,这里的记录数不是很固定,设置为auto可能会被挡住,设置固定高度时,option很少时,也很丑 所以这里给出我自己自动调整combobox的p ...

  4. atitit.高性能遍历 文本文件行 attilax总结

    atitit.高性能遍历 文本文件行 attilax总结 文件读写有以下几种常用的方法 1 通常io读取2.5s 1 nio读取或许越高的.. 2 NIO通常采用Reactor模式,AIO通常采用Pr ...

  5. 使用tc对linux中某ip段限速

    TC 无需安装,Linux 内核自带例:将IP地址段192.168.1.0/24 上传下载限速为 5M将以下内容添加到/etc/ppp/ip-up文件exit 0上面. down=5Mbituploa ...

  6. action(二)

    RemoveSelf :消失 CCFiniteTimeAction* action = CCSequence::create( CCMoveBy::create( , ccp(,)), CCRotat ...

  7. 03、矢量图形查询工具(Symbol Unicode)

    目前的软件开发中,很多地方都使用到了矢量图标,在 Metro app 的开发中,可以使用 Windows 系统图标(02.Universal app 中按钮图标使用 ),包括 Segoe UI Sym ...

  8. ptxdist for sama5d3

    http://www.vahanus.net/~csc/scm/ptxdist-at91sama5d3-xpld.git/

  9. typeof关键字

    C语言中 typeof 关键字是用来定义变量数据类型的.在linux内核源代码中广泛使用. 使用方法 1.当x的类型为是 int 时 _min1变量的数据类型则为 int. 2.当x为一个表达式时(例 ...

  10. spingboot集成jpa(一)

    springboot + jpa 练习 spingboot集成jpa(一):最基本的环境搭建 spingboot集成jpa(二):使用单元测试 1. pom.xml中添加依赖 <!-- jdbc ...