iOS开发之--FMDB的使用

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

一般很多时候,大牛封装的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 = 0; i<10; i++) {
        NSString *names = [NSString stringWithFormat:@"h_Jack%d",arc4random_uniform(50)];

        //不确定的参数用?来占位
        [__db executeUpdate:@"INSERT INTO t_student (name, age) VALUES (?, ?);",names,@(arc4random_uniform(50))];
    }
}

//删除数据
-(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:0];

    //遍历结果
    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(0, 300, 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 50;
}

-(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];

}

最终效果图如下:

左滑删除后,数据直接从数据库里面删除!

时间: 2024-10-06 00:40:35

iOS开发之--FMDB的使用的相关文章

iOS开发 数据库FMDB

iOS开发  数据库FMDB 1.简介 需求作用: 如果需要保存大量的结构较为复杂的数据时候, 使用数据库, 例如交规考试项目 常用的数据库: (1)Microsoft SQL Server 2000/2008, 中小企业使用较多 (2)Oracle 比较复杂, 大企业使用较多 (3)Mysql数据库, 网站使用较多 (4)sqlite: 本地数据库, 访问数据足够快, 直接访问文件 足够简单, 功能相对其他数据库软件不是特别齐全, 足够用了  足够小, 系统不超过1M, 适合在移动端上使用 2

iOS开发数据库-FMDB

前言 FMDB是以OC的方式封装了SQLite的C语言API,使用起来更加面向对象,省去了很多麻烦.冗余的C语言代码:对比苹果自带的Core Data框架,更加轻量级和灵活:提供了多线程安全的数据库操作方法,有效地防止数据混乱:FMDB同时兼容ARC和非ARC工程,在编译的时候会自动根据工程配置来调整相关的内存管理代码. 使用方法 FMDB有三个主要的类 FMDatabase 表示一个单独的SQLite数据库. 用来执行SQLite的命令. FMResultSet 表示FMDatabase执行查

iOS开发中FMDB的使用

1.什在日常的开发中,我们需要用到离线缓存将数据信息存入数据库,在没有网络的时候进行加载,而我们IOS用的就是sqlite3数据库,用原生的sql我们也能实现,但是书写起来比较麻烦,尤其是其它语言转过来的程序员会感觉吃力,下面我们介绍一款比较优秀还简单的第三方FMDB 2.FMDB的下载地址:https://github.com/ccgus/fmdb 3.在FMDB下载文件后,工程中必须导入如下文件,并使用 libsqlite3.dylib 依赖包 4 FMDB常用类 FMDatabase :

IOS开发——使用数据库

IOS开发——使用FMDB数据库 简介 需求作用: 如果需要保存大量的结构较为复杂的数据的时候,使用数据库,例如交规考试项目 1.数据库的基本介绍 数据库(DB)是一种数据模型组织起来并存放存储管理的数据仓库.它是由文件管理发展起来的,如今的数据库基本上都是关系型数据库. 数据库的基本操作是增.删.查.改. 常见的几种数据库,Oracle,Access,SQL Server,DB2,Mysql 手机上使用的数据库为SQLite,因为它占用资源很好,易于配置等原因. 2.mesaSQLite 使用

iOS开发数据库篇—FMDB数据库队列(下)

iOS开发数据库篇—FMDB数据库队列(下) 一.代码示例 1.需要先导入FMDB框架和头文件,由于该框架依赖于libsqlite库,所以还应该导入该库. 2.代码如下: 1 // 2 // YYViewController.m 3 // 05-FMDB数据库队列 4 // 5 // Created by apple on 14-7-28. 6 // Copyright (c) 2014年 wendingding. All rights reserved. 7 // 8 9 #import "Y

IOS开发之数据库FMDB

IOS开发之数据库FMDB 1.简介 需求作用:如果需要保存大量的结构较为复杂的数据时候, 使用数据库, 例如交规考试项目 常用的数据库: (1)Microsoft SQL Server 2000/2008:中小企业使用较多 (2)Oracle:比较复杂, 大企业使用较多 (3)Mysql数据库:网站使用较多 (4)sqlite:本地数据库, 访问数据足够快, 直接访问文件  足够简单, 功能相对其他数据库软件不是特别齐全, 足够用了  足够小, 系统不超过1M, 适合在移动端上使用 2. Me

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

iOS开发数据库篇—FMDB简单介绍 一.简单说明 1.什么是FMDB FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 2.FMDB的优点 使用起来更加面向对象,省去了很多麻烦.冗余的C语言代码 对比苹果自带的Core Data框架,更加轻量级和灵活 提供了多线程安全的数据库操作方法,有效地防止数据混乱 3.FMDB的github地址 https://github.com/ccgus/fmdb 二.核心类 FMDB有三个主要的类 (1)FMDa

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

iOS开发数据库篇—FMDB数据库队列 一.代码示例 1.需要先导入FMDB框架和头文件,由于该框架依赖于libsqlite库,所以还应该导入该库. 2.代码如下: 1 // 2 // YYViewController.m 3 // 05-FMDB数据库队列 4 // 5 // Created by apple on 14-7-28. 6 // Copyright (c) 2014年 wendingding. All rights reserved. 7 // 8 9 #import "YYVi

iOS开发之用代码实现数据库FMDB的操作

iOS开发之用代码实现数据库FMDB的操作 1.简介 需求作用: 如果需要保存大量的结构较为复杂的数据时候, 使用数据库, 例如交规考试项目 常用的数据库: (1)Microsoft SQL Server 2000/2008, 中小企业使用较多 (2)Oracle 比较复杂, 大企业使用较多 (3)Mysql数据库, 网站使用较多 (4)sqlite: 本地数据库, 访问数据足够快, 直接访问文件 足够简单, 功能相对其他数据库软件不是特别齐全, 足够用了  足够小, 系统不超过1M, 适合在移