前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS开发——FMDB的使用

iOS开发——FMDB的使用

作者头像
Originalee
发布2018-08-30 10:43:46
7360
发布2018-08-30 10:43:46
举报
文章被收录于专栏:编程之旅编程之旅

今天决定给手上的项目加上一个数据库,用来进行数据持久化操作,关于在iOS端的数据持久化方式的差异,这里也就不再赘述,相信如果真实使用并且去感受过的人,有自己的评判标准。

在比较了RealmSQLite之后,我决定在项目中依然使用SQLite数据库,并切还是使用FMDB这个第三方库来简化操作。(Realm我是觉得体积庞大,至于CoreData问我为什么不用,小心我打人哦)。

SQLite语句,从我自身来说,感觉其实没有那么好的记忆力,所以我又花了一点点时间来温习FMDB的常规操作,想到自己从来没有总结过数据库这方面的知识,今天就花一点点时间,对iOS端SQLite数据库做一点操作层面的总结。

SQLite数据库,其实并不难学,打败许多初学者的,我觉得应该是它C语言中繁琐的API。我之前说我记不住,这套API,我真的看几次忘几次。所以才有了应运而生的FMDB

建表以及关闭表

使用数据库的第一件事,就是建立一个数据库。要注意的是,在iOS环境下,只有document directory 是可以进行读写的。在写程序时用的那个Resource资料夹底下的东西都是read-only。因此,建立的资料库要放在document 资料夹下。方法如下:

代码语言:javascript
复制
    //建表
    NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSLog(@"doc = %@", doc);
    NSString *fileName = [doc stringByAppendingPathComponent:@"device.sqlite"];
    FMDatabase *db = [FMDatabase databaseWithPath:fileName];
    if ([db open]) {
        BOOL result = [db executeUpdate:@"CREATE TABLE IF NOT EXISTS Device (deviceID text, deviceName text, deviceType integer, deviceStatus integer);"];
        if (result) {
            NSLog(@"创建表成功");
        } else {
            NSLog(@"建表失败");
        }
    }

这样简单的操作就已经完成了数据库的创建,每一行代码都很好理解,先是找到程序在沙盒中的路径,之后填写数据库的名字,完成创建。如果创建数据库成功,那么我们就创建一个名字叫Device的表,这个设备表里有 deviceID, deviceName, deviceType, deviceStatus 四个字段,他们的类型分别是text、text、integer、integer

关于CURD

插入数据

首先,我们对我们的DeviceModel的模型文件声明属性,

代码语言:javascript
复制
#import <Foundation/Foundation.h>

@interface DeviceModel : NSObject

@property (nonatomic, copy) NSString *deviceName;

@property (nonatomic, copy) NSString *deviceID;

@property (nonatomic, assign) NSInteger deviceType;

@property (nonatomic, assign) NSInteger deviceStatus;

- (instancetype)initWithDeviceName:(NSString *)deviceName DeviceID:(NSString *)deviceID DeviceType:(NSInteger)deviceType DeviceStatus:(NSInteger)deviceStatus;

+ (instancetype)DeviceWithDeviceName:(NSString *)deviceName DeviceID:(NSString *)deviceID DeviceType:(NSInteger)deviceType DeviceStatus:(NSInteger)deviceStatus;

@end

.m文件中写好它的初始化方法

代码语言:javascript
复制
#import "DeviceModel.h"

@implementation DeviceModel

- (instancetype)initWithDeviceName:(NSString *)deviceName DeviceID:(NSString *)deviceID DeviceType:(NSInteger)deviceType DeviceStatus:(NSInteger)deviceStatus {
    
    self = [super init];
    
    if (self) {
        _deviceName = deviceName;
        _deviceID = deviceID;
        _deviceType = deviceType;
        _deviceStatus = deviceStatus;
    }
    return self;
}

+ (instancetype)DeviceWithDeviceName:(NSString *)deviceName DeviceID:(NSString *)deviceID DeviceType:(NSInteger)deviceType DeviceStatus:(NSInteger)deviceStatus {
    
    DeviceModel *model = [[DeviceModel alloc] initWithDeviceName:deviceName DeviceID:deviceID DeviceType:deviceType DeviceStatus:deviceStatus];
    return model;
    
}

@end

接下来是插入数据了

插入数据跟前面一样,用executeUpdate后面加语法就可以了。比较不同的是,因为插入的数据会跟Objective-C的变数有关,所以在string里使用?号来代表这些变数。

代码语言:javascript
复制
    DeviceModel *model = [[DeviceModel alloc] initWithDeviceName:@"控制主机" DeviceID:@"0001" DeviceType:1 DeviceStatus:0];
    [db executeUpdateWithFormat:@"INSERT INTO Device (deviceID, deviceName, deviceType, deviceStatus) VALUES (%@, %@, %ld, %ld);",model.deviceID, model.deviceName, model.deviceType, model.deviceStatus];

删除更新数据

代码语言:javascript
复制
//删除更新数据
    NSString *device1 = @"0001";
    [db executeUpdateWithFormat:@"delete from Device where deviceID = %@;", device1];
    [db executeUpdateWithFormat:@"update Device set deviceStatus = %d where deviceID = %@", 1, device1];

查询数据

代码语言:javascript
复制
//查询数据
    FMResultSet *resultSet = [db executeQuery:@"select * from Device"];
    while ([resultSet next]) {
        int type = [resultSet intForColumn:@"deviceType"];
        int status = [resultSet intForColumn:@"deviceStatus"];
        NSString *name = [resultSet objectForColumnName:@"deviceName"];
        NSString *id = [resultSet objectForColumnName:@"deviceID"];
        NSLog(@"type = %d , status = %d, name = %@, id = %@", type, status, name, id);
        } 

至此,FMDB的常用操作就已经讲完了,后面还会补上FMDB的多线程操作。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016.10.20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 建表以及关闭表
  • 关于CURD
    • 插入数据
      • 删除更新数据
        • 查询数据
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档