SQLite3语句以及用实现FMDB数据存储的学习

SQLite的使用——OC代码 一、添加”libsqlite3.dylib”库文件二、代码结构三、代码实现1.AppDelegate.m#import "AppDelegate.h" #import "SQLiteManager.h"@interface AppDelegate ()@end@implementation AppDelegate - (BOOL)application:(UIApplication *)applic 阅读详情

FMDB与数据存储的学习

前言

这周开始挑选完项目,我们就要进入项目内容的相关学习,为后面项目的编写做铺垫,本篇文章就是介绍了数据存储的相关知识。

SQLite

SQLite,是一款轻型的数据库,它包含在一个相对小的C库中。

设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。

支持Windows/Linux/Unix等等主流PC操作系统和Android/iOS等主流手机操作系统

SQLite数据类型

SQLite一共只有五种数据类型

  • NULL:表示该值为NULL值。
  • INTEGER:整型值。
  • REAL:浮点值。
  • TEXT: 文本字符串,存储使用的编码方式为UTF-8、UTF-16。
  • BLOB:二进制大对象(BLOB)是任意类型的数据。

SQLite常用函数

  • sqlite3_open——打开数据库,如果目录下没有就创建一个
  • sqlite3_close——关闭数据库
  • sqlite3_exec —— 用于执行 SQL 语句
  • sqlite3_prepare_v2——用于将 SQL 查询语句编译为可执行的 SQLite 语句。
  • sqlite3_step
  • sqlite3_column_text

SQLite相关语句的使用

界面配置

想要在OC之中使用SQLite,需要以下步骤:

在项目的general选项之中,找到Frameworks, Libraries, and Embedded Content的选项

请添加图片描述

点击加号,然后在弹出的搜索栏之中寻找sqlite

请添加图片描述

这样子就可以将框架导入到我们的工程文件了

学习SQLite之前还需要了解部分关于NSBundle的相关内容,有兴趣的读者可以进行了解

SQLite的OC使用

创建Model

我们创建一个person来进行文件操作

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface Person : NSObject
@property (strong, nonatomic) NSString *name;
@property (strong, nonatomic) NSString *phone;
@property (strong, nonatomic) NSString *address;

-(instancetype)initWithName:(NSString *)name andPhone:(NSString *)phone andAddress:(NSString *)address;

@end

#import "Person.h"

@implementation Person
-(instancetype)initWithName:(NSString *)name andPhone:(NSString *)phone andAddress:(NSString *)address {
    if(self = [super init]) {
        self.name = name;
        self.phone = phone;
        self.address = address;
    }
    return self;
}
- (NSString *)description
{
    return [NSString stringWithFormat:@"Name:%@,Phone:%@,Address:%@", _name,_phone,_address];
}
@end

创建库

-(void)createDB: (NSString *)dbName{
    //1.查找沙盒
    NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
    //2.拼接数据库
    NSString *dbPath = [docPath stringByAppendingPathComponent:dbName];
    //3.常见数据库
    int result = sqlite3_open([dbPath UTF8String], &sqlite);
    if (result == SQLITE_OK) {
        NSLog(@"数据库创建成功");
    }
    else {
        NSLog(@"数据库创建失败");
    }
}

创建表格

-(void) createTab: (NSString *)tabName{
    NSString *sql = [NSString stringWithFormat:@"create table %@(id integer primary key autoincrement, name text, phone text, address text)", tabName];
    char *error;
    int result = sqlite3_exec(sqlite, [sql UTF8String], NULL, NULL, &error);
    if (result == SQLITE_OK) {
        NSLog(@"表格创建成功");
    } else {
        NSLog(@"表格创建失败");
    }
}

其中sql之中的内容如下

id integer primary key autoincrement:

  • id:列名,表示每一行的唯一标识符。
  • integer:数据类型,表示 id 列的数据类型是整数。
  • primary key:指定 id 列是主键,主键是每行数据的唯一标识,不允许重复。
  • autoincrement:表示 id 值会自动递增,每次插入新数据时,id 会自动加 1,从而确保每一行有一个唯一的 id 值。

剩下的name,address等内容其实就是对应的每列内容所存储的方式

int sqlite3_exec(
    sqlite3 *db,              /* 数据库连接对象 */
    const char *sql,          /* 要执行的 SQL 语句 */
    int (*callback)(void*,int,char**,char**),  /* 回调函数 */
    void *data,               /* 回调函数的用户数据 */
    char **errmsg             /* 错误信息 */
);

值得注意的是,在创建表格之前我们需要先打开数据库才可以成功创建表格

添加数据

-(void)insertPerson: (Person *)person{
    NSString *sql = [NSString stringWithFormat:@"insert into stus(name, phone, address) values('%@', '%@', '%@')", person.name, person.phone, person.address];
    char *error;
    int result = sqlite3_exec(sqlite, [sql UTF8String], NULL, NULL, &error);
    if (result == SQLITE_OK) {
        NSLog(@"数据插入成功");
    } else {
        NSLog(@"数据插入失败:%s",error);
    }
}

用终端查看表中数据

对于插入表中的数据,我们可以使用终端来进行查看,首先是找到Document目录下的路径,我们可以打印出来

NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
NSLog(@"%@",docPath);

拿到Document的路径之后,就在终端使用cd进入目录,然后直接使用以下命令进入DB文件

sqlite3 your_database_file.db//这里换成你自己的库名
查看所有表

在 SQLite 命令行模式中,输入以下命令列出所有表:

.tables
查看表结构

如果想查看某个表的结构(例如 table_name 表),可以使用以下命令:

.schema table_name
查看表内容

要查看表中的数据,可以使用 SELECT 语句,例如:

SELECT * FROM table_name;
退出 SQLite

完成后,输入 .exit 或按 Ctrl + D 退出 SQLite 命令行模式:

.exit

删除数据

-(void)deletePerson: (NSString *)personName {
    NSString *sql = [NSString stringWithFormat:@"delete from stus where name = '%@'", personName];

    char *error;
    int result = sqlite3_exec(sqlite, [sql UTF8String], NULL, NULL, &error);
    if (result == SQLITE_OK) {
        NSLog(@"删除数据成功");
    }
    else {
        NSLog(@"删除数据失败:%s",error);
    }
}

这个删除功能只是在库之中无法查询到删除之后的数据,但是在库中仍然存在,所以这是一个相对不太安全的操作,需要我们在实际运用的时候进行注意

更新数据

-(void)updatePerson: (Person *)person{
    NSString *sql = [NSString stringWithFormat :@"update stus set phone ='%@', address = '%@' where name = '%@'", person.phone, person.address, person.name];
    char *error;
    int result = sqlite3_exec(sqlite, [sql UTF8String], NULL, NULL, &error);
    if (result == SQLITE_OK) {
        NSLog(@"更新数据成功");
    }
    else {
        NSLog(@"更新数据失败:%s",error);
    }
    sqlite3_close(sqlite);
}

这个程序是根据学生名字来进行更新相关信息

查询数据

(NSArray<Person *> *)queryPersonByName: (NSString *)name{
    NSString *sql = [NSString stringWithFormat:@"SELECT phone, address FROM stus WHERE name = '%@'", name];
    sqlite3_stmt *stmt;
    int result = sqlite3_prepare_v2(sqlite, [sql UTF8String], -1, &stmt, NULL);
    NSMutableArray *person = [NSMutableArray array];
    if (result == SQLITE_OK) {
        while (sqlite3_step(stmt) == SQLITE_ROW) {
            const char *Phone = (const char *) sqlite3_column_text(stmt, 0);
            const char *cAddress = (const char *)sqlite3_column_text(stmt, 1);
            Person *p = [[Person alloc] initWithName:name andPhone:[NSString stringWithUTF8String:Phone] andAddress:[NSString stringWithUTF8String:cAddress]];
            [person addObject:p];
        }
    } else {
        NSLog(@"查询失败: %s", sqlite3_errmsg(sqlite));
    }
    
    return person;
}

sqlite3_stmt *stmt; 声明了一个 sqlite3_stmt 结构体指针 stmt,相当于行指针,用于存储编译后的 SQL 语句。

sqlite3_prepare_v2 函数编译 SQL 语句,将编译结果放入 stmt,以供后续执行。

result 会接收 sqlite3_prepare_v2 的返回值,若 result 等于 SQLITE_OK,则表示 SQL 语句准备成功。

sqlite3_step:逐行获取查询结果。如果 sqlite3_step 返回 SQLITE_ROW,说明查询到了数据。

sqlite3_column_text:用于获取当前行的指定列值。sqlite3_column_text(stmt, 0) 获取第一列 (phone) 的值,sqlite3_column_text(stmt, 1) 获取第二列 (address) 的值。

FMDB

了解完相关的SQLite3的原理,我们可以也使用第三方库FMDB来进行来进行数据库存储

FMDB是iOS 和 macOS 平台上一个用于操作 SQLite 数据库的库,它封装了 SQLite 的 C 语言 API,使得在 Objective-C 中处理数据库操作更加简便和安全。

新建类

我们新建一个Model

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface Student : NSObject
@property (strong, nonatomic) NSString *name;
@property (assign, nonatomic) int age;
@property (strong, nonatomic) NSString *sex;
-(instancetype)initWithName:(NSString *)name andAge:(int)age andSex:(NSString *)sex;
@end

NS_ASSUME_NONNULL_END

建立FMDB数据库

NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
NSString *sqlFilePath = [path stringByAppendingPathComponent:@"stu.db"];
self.db = [FMDatabase databaseWithPath:sqlFilePath];

我们用拼接的方法,首先获取沙盒文件之中Document路径

然后我们就用以下方式用路径来创建数据库

  1. 一个文件的系统路径:如果不存在该路径,会自动创建
  2. 一个空字符串@"":在一个临时目录下创建一个空的数据库,当数据库连接关闭,自动删除数据库文件
  3. NULL:会创建一个内存中临时数据库,当数据库连接关闭的时候,将被自动删除

后面两种不是我们要的因为没有保存数据,那么我们使用第一种方法

FMDatabase *db = [FMDatabase databaseWithPath:sqlFilePath];
self.DataBase = db;

打开数据库

-(void)createDB{
    NSString *docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES).firstObject;
    NSString *fileName = [docPath stringByAppendingPathComponent :@"student.db"];
    self.db = [FMDatabase databaseWithPath: fileName];
    BOOL isSuccess = [self.db open];
    if (isSuccess) {
        NSLog(@"打开数据库成功");
    }
    else {
        NSLog(@"打开数据库失败");
    }
}

创建表

-(void)createTab {
    [self createTab];
    NSString *sql = @"create table t_stu(id integer primary key autoincrement, name text, age integer, sex text)";
    BOOL isSuccess = [self.db executeUpdate: sql];
    if (isSuccess) {
        NSLog(@"数据表创建成功");
    } else {
        NSLog(@"数据表创建失败");
    }
    [self.db close];
}

添加数据

-(void)insertStu:(Student *)stu{
    [self createDB];
    NSString *sql = @"insert into t_stu(name, age, sex) values (?, ?, ?)";
    BOOL isSuccess = [self.db executeUpdate: sql, stu. name, @(stu.age), stu.sex];
    if (isSuccess) {
        NSLog(@"数据插入成功");
    }
    else {
        NSLog(@"数据插入失败");
    }
    [self.db close];
}

注意:对于FMDB来说它的操作对象必须是OC之中的对象,而不能是C语言之中的int,double的相关类型,所以需要我们将相关内容的用NSNumber进行分装

删除数据

-(void)deleteStu: (NSString *)stuName{
    [self createDB];
    NSString *sql = @"delete from t_stu where name = ?" ;
    BOOL isSuccess = [self.db executeUpdate: sql, stuName];
    if (isSuccess) {
        NSLog(@"数据删除成功");
    } else {
        NSLog(@"数据删除失败");
    }
    [self.db close];
}

更改数据

-(void)updateStu: (Student *)stu{
    [self createDB];
    NSString *sql = @"update t_stu set age =?, sex =? where name = ?" ;
    BOOL isSuccess = [self.db executeUpdate:sql, @(stu.age), stu.sex, stu.name];
    if (isSuccess) {
        NSLog(@"数据修改成功");
    }
    else {
        NSLog(@"数据修改失败");
    }
    [self.db close];
}

查询数据

-(NSArray<Student *> *)queryStu:(NSString *)stuName{
    [self createDB];
    NSMutableArray *stus = [NSMutableArray array];
    NSString *sql = @"select age, sex from t_stu where name = ?";
    FMResultSet *result = [self.db executeQuery:sql, stuName];
    while (result.next) {
        NSString *sex = [result stringForColumn :@"sex"];
        int age = [result intForColumn:@"age"];
        Student *stu = [[Student alloc]initWithName:stuName andAge:age andSex:sex];
        [stus addObject: stu];
    }
    [self.db close];
    return stus;
}

总结

这还是一个比较粗糙的FMDB的实用说明,浅层的学习也足够知乎日报项目的实用,后续的相关学习就等知乎日报完成之后在。再进行系统规划吧

参考文章

SQLite 入门教程(非常详细)零基础入门到精通,收藏这一篇就够了

合集·iOS开发基础-基于Objective-C语言

iOS源生SQLite3基本操作(OC版) 对iOS开发中使用到得SQLite3进行简单的操作,展示基本的使用方法,使用语言OC。 立即下载

相关推荐

Simulink标定工作流优化:当A2L文件遇到ELF,如何用Matlab脚本打通‘最后一公里’?

本文探讨了Simulink标定工作流中A2L与ELF文件处理的自动化解决方案。通过Matlab脚本实现A2L文件智能合并与ELF文件自动匹配,解决了传统手动操作效率低下和易出错的问题,显著提升汽车ECU开发效率。重点介绍了脚本实现细节及持续集成系统集成方案。

weixin_30564785的博客 338

基于SQLITE数据库的C语言编程

出自这里 一 SQLITE 操作入门 sqlite 提供的是一些 C 函数接口,你可以用这些函数操作数据库。通过使用这些接口,传递一些标准 sql 语句(以 char * 类型)给 sqlite 函数, sqlite 就会为你操作数据库。 sqlite 跟 MS 的 access 一样是文件型数据库,就是说,一个数据库就是一个文件,此数据库里可以建立很多的表,可以建立索引、触发器等等,但...

peizhiinfo 569

CIFAR-100模型性能对比:Top1与Top5错误率深度解析

本文深度解析了CIFAR-100数据集上Top1与Top5错误率的核心意义与差异。通过对比MobileNet、ResNet、DenseNet等主流模型的性能数据,揭示了模型架构、训练策略及数据集特性如何共同影响这两个关键指标,并为不同应用场景下的模型选择提供了实战指南。

weixin_28224217的博客 337

SQLite C语言接口函数

sqlite3 *db是数据库连接对象,用来操作数据库 打开数据库对象函数 int sqlite3_open(     constchar*filename,/*数据库文件名 */     sqlite3 **ppDb/* 创建的数据库连接对象*/ ); 关闭数据库对象函数 int sqlite3_close(sqlite3*/*打开的数据库连接对象*/); 返回数据库错误

wuyu92877的专栏 1946

VMware ESXI 7.0实战:4T硬盘RAID1配置与性能调优全记录

本文详细记录了在VMware ESXI 7.0环境下,为Dell服务器配置两块4T硬盘组建RAID1并进行深度性能调优的全过程。文章重点解析了RAID控制器写入策略(Write-Back with BBU)、读取策略(Read-Ahead)的关键选择,并深入探讨了在ESXI虚拟机层面通过选用PVSCSI控制器、调整虚拟磁盘缓存策略(scsiX:Y.caching)等技巧,以最大化满足数据分析等IO密集型工作负载的需求,最终实现性能的显著提升。

gaochao的博客 257

ADS许可证配置全攻略:从破解文件放置到环境变量设置(实测有效版)

本文详细介绍了ADS许可证配置的全流程,包括环境准备、全新安装、破解文件部署和环境变量设置等关键步骤。针对常见的安装和授权问题,提供了实测有效的解决方案,帮助工程师快速完成ADS的配置与优化。

websocket5live的博客 375

sqlite3数据库的使用

本文主要介绍sqlite3的使用和常用的API接口

qq_52531759的博客 6301

YOLOv8损失函数升级:从CIoU到Wise-IoU v3的实战调优与避坑指南

本文详细介绍了如何将YOLOv8的损失函数从CIoU升级到Wise-IoU v3,以提升目标检测性能,特别是在小目标检测和样本不均衡场景下的表现。通过实战调优步骤和避坑指南,帮助开发者有效应用Wise-IoU v3的动态聚焦机制和单调性控制,显著提升模型精度和训练稳定性。

weixin_33737774的博客 590

SQLite3语句以及FMDB数据存储初步学习

SQLite3是一款轻量级数据库,常用于嵌入式开发,支持NULL、INTEGER、REAL、TEXT和BLOB五种数据类型。

2501_91546205的博客 1171

ANSYS FLUENT 超临界流体物性分段线性插值数据批量导入

使用fluent自带数据库进行超临界流体仿真时,时不时会出现计算错误,考虑是数据库不稳定引起,而使用自定义的分段线性插值物性则不会出现上述情况。 超临界流体在拟临界点附近物性变化剧烈,需要使用较多的数据点才能更准确的表述物性,如果是在对话框中修改,一次只能输入一个点,人工输入极其费时费力且容易失误。 数据批量导入方法为: 1.以CO2为例,使用REFREPRO等物性查询软件或数据资料,获得所需物性数据表。 2.在FLUENT材料Materia...

wind_rider的博客 1万+

如何用python自己复现worldquant brain中的回测结果

本文介绍了在Python中复现WorldQuant Brain平台上alpha 101因子1和4的回测框架构建要点。重点分析了Brain平台的策略设置:使用TOP 3000高流动性股票(可用中证1000/2000替代);delay=1表示t日信号在t+1日开盘调仓;详细解释了market/sector/industry/subindustry四级中性化方法;说明了decay参数控制持仓权重线性衰减;以及TRUNCATION参数限制单股仓位风险。文章还探讨了不同调仓时点的实现差异,为自主构建量化回测系统提供了

夏之微风的博客 731

iphone上的数据存储,sqlite3---第三方框架FMDB。

在iPhone上是采用sqlite进行数据存储是我一种比较习惯性的做法。一般在其他平台也比较习惯用sqlite,比如android。 而iphone上有一些封装好的第三方框架提供使用,更节省了许多时间。如:Sqlitepersistentobjects ,FMDB。今天查找了这

1万+

【赛题解析&命令脚本配置】2023年全国职业院校技能大赛GZ073网络系统管理赛项赛题第9套模块A:网络构建 & (三)无线网络配置+(四)出口网络配置-命令配置

【赛题解析&命令脚本配置】2023年全国职业院校技能大赛GZ073网络系统管理赛项赛题第9套模块A:网络构建 & (三)无线网络配置+(四)出口网络配置-命令配置

君逍遥o 1017

iPhone应用数据存储Sqlite3第三方框架FMDB

iPhone应用数据存储Sqlite3第三方框架FMDB是本文要介绍的内容,在iPhone上是采用sqlite进行数据存储是我一种比较习惯性的做法。一般在其他平台也比较习惯用sqlite,比如android。 而iphone上有一些封装好的第三方框架提供使用,更节省了许多时间。如:Sqlitepersistentobjects ,FMDB。今天查找了这个两个框架,感觉FMDB的风格更...

anziji4025的博客 234

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

iphone上的数据存储,sqlite3---第三方框架FMDB

补充:是导入FMDB之后,还要记得导入iOS的sqlite3Framework,libsqlite3.0.dylib,PS:我发现网上有些转载我的博文的,我很欢迎,毕竟我的一些博文也是总结别人的经验的。不用愁,之前我就提到了FMDB中的另外一个主要的类,FMResultSet,这是一个结果集!今天查找了这个两个框架,感觉FMDB的风格更符合我的使用,其实两者是各有优点的,只是看个人喜好而已。注意插入的数据使用了通配符,这跟iphone直接使用sqlite借口的绑定变量是一样的,后面的通配符匹配的数据。

m0_72345017的博客 305

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

ios学习--sqlite 操作工具 FMDB

這次要分享的是在iOS中使用SQLite。其實我對SQLite一點概念都沒有,因為一直沒有機會使用它。有時候突然想到,就會找幾本手邊的工具書或在網路上找尋在iOS中使用SQLite的教學。但是每次學,每次失敗,讓我愈來愈討厭SQLite 囧。直到有一次在網路上發現了FMDB這個東西,才發現不是SQLite很難學,而是SQLite的C API對初學者來說實在太麻煩太瑣碎,難度太高,難怪我怎麼學都學不

yanfangjin的专栏 2941

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

SQLite的基本使用 与FMDB框架的使用

SQLite是一款轻型的嵌入式数据库 它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了 它的处理速度比Mysql、PostgreSQL这两款著名的数据库都还快 什么是数据库 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库 数据库可以分为2大种类 关系型数据库(主流) 对象型数据库 常用关系型数据库 PC端:Orac

yejiexiaobai的博客 1079

IOS开发数据存储篇—libsqlite3和FMDB的基本使用和区别

一、简要介绍libsqlite3是IOS中纯C语言操作Sqlite数据库的一个库文件。使用起来和OC面向对象的方式有点别扭,不是特别的方便。FMDB是IOS平台的SQLite数据库框架,以OC的方式封装了SQLite的C语言的API。FMDB使用起来更加的面向对象,省去了很多麻烦、冗余的C语言代码,对比苹果自带的Core Data框架,更加的轻量级和灵活。提供了多线程安全的数据库操作的方法,有效的防

yixiangboy的博客 3135

iOS数据存储的几种方式【plist、序列化/反序列化、sqlite3、FMDB】

Demo连接:https://github.com/asd521411/DataPersistenceDemo.git 前言 工作需要,特意准备一篇入门文章,为新人开发者介绍常见的数据存储。 正文 数据存储 数据存储本质就是运行时的对象保存在文件、数据库中。数据存储可以分为两步:首先是将对象转换成二进制数据,这一步也叫序列化;相反,将二进制数据转换成对象则称为反序列化;然后是考虑二进制数据如何...

草帽~小子^的博客 657

数据存储 FMDB

数据存储 —FMDB 一、FMDB简介 iOS中原生的SQLite API在进行数据存储的时候,需要使用C语言中的函数,操作比较繁琐。于是,就出现了一系列将SQLite API进行封装的库,例如FMDB、PlausibleDabase、SQLitePersistentObjects等。 FMDB是一款简洁、易用的封装库。因此,在这里推荐使用第三方框架FMDB,它是对lisql...

dbql10359的博客 202

数据存储 - libsqlite3和FMDB的基本使用和区别

一、简要介绍 libsqlite3是IOS中纯C语言操作Sqlite数据库的一个库文件。使用起来和OC面向对象的方式有点别扭,不是特别的方便。 FMDB是IOS平台的SQLite数据库框架,以OC的方式封装了SQLite的C语言的API。FMDB使用起来更加的面向对象,省去了很多麻烦、冗余的C语言代码,对比苹果自带的Core Data框架,更加的轻量级和灵活。提供了多线程安全的数据库操作的方法,有...

宋卓的博客 374

数据存储 - FMDB源码分析(FMResultSet)

FMDB是IOS平台的SQLite数据库框架,以OC的方式封装了SQLite的C语言的API。FMDB使用起来更加的面向对象,省去了很多麻烦、冗余的C语言代码具体对比详见我的简书iOS开发数据存储篇—libsqlite3和FMDB的基本使用和区别,对比苹果自带的Core Data框架,更加的轻量级和灵活。提供了多线程安全的数据库操作的方法,有效的防止数据混乱。开源地址。 源码分析 FMDB源...

宋卓的博客 642

IOS 数据存储之 FMDB 详解

FMDB是用于进行数据存储的第三方的框架,它与SQLite与Core Data相比较,存在很多优势。   FMDB是面向对象的,它以OC的方式封装了SQLite的C语言API,使用起来更加的方便,不需要过多的关心数据库操作的知识。但是它本身也存在一些问题,比如跨平台,因为它是用oc的语言封装的,所以只能在ios开发的时候使用,如果想实现跨平台的操作,来降低开发的成本和维护的成本,就需要使用比较原

无名 992

mysql和sqlite3 ios_ios数据存储——数据库:SQlite3以及第三方库FMDB

原生数据库:SQlite3一、必备条件在ios项目中使用sqlite需要添加libsqlite3.dylib库二、简单介绍常用方法sqlite3 *db, 数据库句柄,跟文件句柄FILE很类似sqlite3_stmt *stmt, 这个相当于ODBC的Command对象,用于保存编译好的SQL语句sqlite3_open(), 打开数据库,没有数据库时创建。sq...

weixin_42347750的博客 320

ios数据存储中关于Sqlite3使用第三方框架FMDB

在网上发现一个对sqlite3数据库操作的一个封装类(fmdb),看起来比较优雅,拿来研究一下。  首先从这个网址:https://github.com/ccgus/fmdb下载fmdb的源码,  将Src文件夹下的文件复制到您当前工程文件目录下,然后将代码导入到您的工程中(除了fmdb.m),编译一下,如果有错误,可能是您未导入slite3的链接库,打开Build Phases,如将li

£渚∮薰£ 3635
上一篇: 「OC」知乎日报第一周
下一篇: 知乎日报——第二周
小鹿撞出了脑震荡
博客等级 码龄3年 1107粉丝 97原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值