数据持久化(三)使用第三方类库FMDB

iOS数据持久化设计探讨(NSCache,PINCache,YYCache,CoreData,FMDB,WCDB,Realm) 一、目标 了解移动端的数据持久化方式和对应的使用场景,提供相关技术选型做技术储备。 二、数据持久化的目的 快速展示,提升体验 已经加载过的数据,用户下次查看时,不需要再次从网络(磁盘)加载,直接展示给用户 节省用户流量(节省服务器资源) 对于较大的资源数据进行缓存,下次展示无需下载消耗流量 同时降低了服务器的访问次数,节约服务器资源。(图片) 离线使用。 用户浏览过的数据无需联网,... 阅读详情

@SQLite是一种小型的轻量级的关系型数据库,在移动设备上使用是非常好的选择,无论是Android还是IOS,都内置了SQLite数据库,现在的版本都是SQLite3。在IOS中使用SQLite如果使用SDK提供的方法,特别麻烦也不利于理解和使用,感觉使用很不方便,今天就讲讲一个针对IOS的SQlite API封装的第三方库FMDB,FMDB对SDK中的API做了一层封装,使之使用OC来访问,使用方便而且更熟悉。FMDB的下载地址https://github.com/ccgus/fmdb。


@FMDB主要涉及两个类,FMDatabase和FMResultSet 下载完FMDB源码后把文件拖到工程中,并导入SQLite支持        库,libsqlite3.0.dylib


[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. #import "HMTDataBaseHandle.h"  
  2. #import "FMDB.h"  
  3. #import "HMTPerson.h"  
  4.   
  5.   
  6. @implementation HMTDataBaseHandle  
  7.   
  8. static HMTDataBaseHandle * _dbHandle = nil;  
  9. + (HMTDataBaseHandle *)shareInstance{  
  10.   
  11.     @synchronized(self){  
  12.       
  13.         if (!_dbHandle) {  
  14.               
  15.             _dbHandle = [[HMTDataBaseHandle alloc]init];  
  16.               
  17.             [_dbHandle openDataBase];  
  18.               
  19.             [_dbHandle createTable];  
  20.         }  
  21.     }  
  22.       
  23.     return _dbHandle;  
  24. }  
  25.   
  26. #pragma mark - 定义一个 FMDatabase 对象  
  27. static FMDatabase * database = nil;  
  28.   
  29. #pragma mark - 获得沙盒文件下Documents路径  
  30. - (NSString *)getDocumentsPath{  
  31.   
  32.     NSString * documents = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];  
  33.   
  34.     return documents;  
  35. }  
  36.   
  37. #pragma mark - 打开数据库操作------ databaseWithPath   open  
  38. - (void)openDataBase{  
  39.   
  40.     if (database) {  
  41.         return;  
  42.     }  
  43.       
  44.     NSString * DataBasePath = [[self getDocumentsPath] stringByAppendingPathComponent:@"test.sqlite"];  
  45.       
  46.     database = [FMDatabase databaseWithPath:DataBasePath];  
  47.     if (![database open]) {  
  48.           
  49.         NSLog(@"打开数据库失败");  
  50.     }  
  51.       
  52.     // 为数据库设置缓存,提高查询效率  
  53.     database.shouldCacheStatements = YES;  
  54.       
  55.     NSLog(@"打开数据库成功");  
  56. }  
  57.   
  58. #pragma mark - 关闭数据库操作  
  59. - (void)closeDataBase{  
  60.   
  61.     if (![database close]) {  
  62.         NSLog(@"关闭数据库失败");  
  63.         return;  
  64.     }  
  65.       
  66.     database = nil;  
  67.     NSLog(@"关闭数据库成功");  
  68.   
  69. }  
  70.   
  71. #pragma mark - 管理创建表的操作  
  72. - (void)createTable{  
  73.   
  74.     [self openDataBase];  
  75.   
  76.     // 判断表是否存在,不存在就创建------ tableExists  
  77.     if (![database tableExists:@"Person"]) {  
  78.           
  79.         [database executeUpdate:@"CREATE TABLE Person(id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)"];  
  80.           
  81.         NSLog(@"创建表成功");  
  82.     }  
  83.       
  84.     [self closeDataBase];  
  85. }  
  86.   
  87.   
  88. #pragma mark - 增加数据操作----- executeUpdate  
  89. - (void)insertIntoDataBase:(HMTPerson *)person{  
  90.   
  91.     [self openDataBase];  
  92.       
  93.     [database executeUpdate:@" INSERT INTO Person (id,name,age) VALUES (?,?,?)",[NSString stringWithFormat:@"%i",person.personId],person.personName,[NSString stringWithFormat:@"%i",person.personAge]];  
  94.   
  95.     [self closeDataBase];  
  96. }  
  97.   
  98. #pragma mark - 删除数据操作----- executeUpdate  
  99. - (void)deleteDataFromDataBase:(HMTPerson *)person{  
  100.   
  101.     [self openDataBase];  
  102.   
  103.     [database executeUpdate:@" DELETE FROM Person WHERE id = ?",[NSString stringWithFormat:@"%i",person.personId]];  
  104.       
  105.     [self closeDataBase];  
  106. }  
  107.   
  108. #pragma mark - 更新数据操作----- executeUpdate  
  109. - (void)updateFromDataBase:(HMTPerson *)person{  
  110.   
  111.     [self openDataBase];  
  112.       
  113.     [database executeUpdate:@" UPDATE Person SET name = ? WHERE id = ?",person.personName,[NSString stringWithFormat:@"%i",person.personId]];  
  114.   
  115.     [self closeDataBase];  
  116. }  
  117.   
  118. #pragma mark - 查询数据操作(与其他的都不一样,查询是调用executeQuery,切记切记!!!!!!)  
  119. - (void)selectAllDataFromDataBase{  
  120.   
  121.     [self openDataBase];  
  122.   
  123.     FMResultSet * resultSet = [database executeQuery:@" SELECT * FROM Person"];  
  124.     while ([resultSet next]) {  
  125.           
  126.         int Id = [resultSet intForColumn:@"id"];  
  127.         NSString * name = [resultSet stringForColumn:@"name"];  
  128.         int age = [resultSet intForColumn:@"age"];  
  129.           
  130.         NSLog(@"personId:%i,personName:%@,personAge:%i",Id,name,age);  
  131.     }  
  132.       
  133.     [self closeDataBase];  
  134. }  
  135.   
  136.   
  137. @end  

@FMDB提供如下多个方法来获取不同类型的数据:

1.intForColumn:
2.longForColumn:
3.longLongIntForColumn:
4.boolForColumn:
5.doubleForColumn:
6.stringForColumn:
7.dateForColumn:
8.dataForColumn:
9.dataNoCopyForColumn:
10.UTF8StringForColumnIndex:
11.objectForColumn:




@如果我们的app需要多线程操作数据库,那么就需要使用FMDatabaseQueue来保证线程安全了。切记不能在多个线程中共同一个FMDatabase对象并且在多个线程中同时使用,这个类本身不是线程安全的,这样使用会造成数据混乱等问题。

     使用FMDatabaseQueue很简单,首先用一个数据库文件地址来初使化FMDatabaseQueue,然后就可以将一个闭包(block)传入inDatabase方法中。在闭包中操作数据库,而不直接参与FMDatabase的管理。

 

[cpp]  view plain copy
  1. -(void)executeDBOperation  
  2. {  
  3.     //获取Document文件夹下的数据库文件,没有则创建  
  4.     NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];  
  5.     NSString *dbPath = [docPath stringByAppendingPathComponent:@"user.db"];  
  6.       
  7.     FMDatabaseQueue *databaseQueue = [FMDatabaseQueue databaseQueueWithPath:dbPath];  
  8.     [databaseQueue inDatabase:^(FMDatabase *db){  
  9.     [db executeUpdate:@"insert into user values (?,?,?)",@"Ren",@"Male",[NSNumber numberWithInt:20]];  
  10.     }];  
  11.     [databaseQueue close];  
  12. }  
【iOS】—— FMDB的基础用法 一.基本介绍: 1.简介: 由于iOS中原生的 SQLite API 使用时非常不方便 ,于是就出现了一系列将 SQLite API 进行封装的库,例如FMDB、PlausibleDatabase、sqlitepersistentobjects等,FMDB是一款简洁易用、轻量级的封装库。 2.什么是FMDB: FMDB是iOS平台的SQLite数据库框架。 FMDB以OC的方式封装了SQLite的C语言API。 3.FMDB同时兼容ARC和非ARC工程,会自动根据工程配置来调整相关的内存管理代码。 4.FM 阅读详情

相关推荐

iOS-FMDB数据库操作指南:从入门到实践

在iOS应用开发中,SQLite作为轻量级的关系型数据库,常被用来处理本地数据存储。然而,原生的SQLite API在使用时存在一定的复杂性,尤其是对开发者来说,需要手动管理数据库的连接、错误处理、以及多线程下的数据同步等问题。这样不仅增加了代码的复杂度,还可能引入内存泄漏、线程安全等问题,影响了应用的性能和稳定性。

weixin_42466723的博客 959

FMDB的基本使用

首先数据库是系统资源,就像我们操作文件一样,所以并发操作时要注意安全。在iOS上,只有一个线程能够打开数据库操作,其他线程要操作数据库必须等数据库关闭后才能打开操作。 iOS中原生的SQLiteAPI在进行数据存储的时候,需要使用C语言中的函数,操作比较麻烦。于是,就出现了一系列将SQLite API进行封装的库,其中使用比较多的例如FMDB,FMDB是对libsqlite3框架的封装,用起

zhongaiteleixi的博客 380

Libero SoC v2021.1离线安装与IP核配置全攻略

本文详细介绍了Libero SoC v2021.1在离线环境下的完整安装与配置流程。核心内容包括如何选择正确的离线安装包、获取并配置许可证、安装与挂载MegaVault IP库,以及将ModelSim仿真器切换至免费SE模式的关键步骤。文章旨在帮助内网开发者避开常见陷阱,顺利完成FPGA开发环境的搭建。

weixin_29279101的博客 406

FMResultSet,column为空的判断

调用 [rs objectForColumnName:@"xxx"]; 如果column xxx没有值,则shan

kyfxbl 1494

android6 usb默认文件管理,不弹RSA配对提示框

本文修改针对 高通 Android6.0.1 出user版本时 https://www.cnblogs.com/Jokeyyu/p/7424262.html http://blog.youkuaiyun.com/sinc00/article/details/44957943 diff --git a/frameworks/base/packages/SystemUI/src/com/android...

木叶风的博客 692

光模块封装工艺简介

光模块按照部件可以分为芯片、光器件、光模块三个层级;按照应用领域大概可分为电信应用、数通应用两个领域;按照内部器件的封装工艺可分为TO、Box、COB三大类。 但是,无论是哪种类型的光模块,其生产工艺基本上可以分为封装、测试两大块。   那什么叫做器件封装呢?我的理解器件封装就是利用胶水、焊料、机械、热量等手段把器件按照一定的先后次序结合形成一个整体的过程,就好像早上吃的煎饼,把面粉、鸡蛋、脆饼、烤肠、葱花等这些“器件”,按照一定的顺序,通过食用油、甜面酱、加热、卷起来等手段结合到一起,形成了美味的

qq_33253182的博客 2818

数据持久化存储:FMDB的使用

FMDB简介:一种第三方开源库,其实就是对SQLite的API进行了封装,在加上面向对象的思想,就不必再用繁琐的C语言API函数了,这要比直接使用SQLite更加的方便。 FMDB优点:使用起来更加面向对象,变得简洁,使用方便;                      对比苹果自带的CoreData框架,更加轻量级,更加灵活;                      提供了多线程安全,有

MikeJune的博客 1529

Cadence PCB仿真使用Allegro PCB SI S参数配置方法图文教程

S参数即S-Parameter是指散射参数,描述信号在传输线中的正反向传输和正反向反射的情况。本文讲述在使用Allegro PCB SI进行信号完整性仿真前,S参数的配置方法。

fydar的博客 2177

2017年5月iOS招人心得答案总结(基础篇)

技术 最近正在准备换份工作, 看到网上有份题库, 觉得不错, 准备整理下, 复习下所学知识, 为面试做足准备, 下面是我整理了一上午的题库答案, 希望能帮大家温习下知识; 当然如果同为找工作的朋友, 也希望你能找到份诚心的工作;之后的答案会后续附上, 谢谢大家(^__^) 嘻嘻…… 基础 1. 为什么说Objective-C是一门动态的语言? ① 什么是动态语言? 动态语言,是指程序在运

x32sky的专栏 1101

光学测量仿真软件:Zygo_(5).Zygo的数据处理与分析方法

通过上述综合案例,我们可以看到Zygo中的数据处理与分析方法是如何一步一步应用于实际数据的。从数据导入到预处理,再到滤波、表面分析、缺陷检测和数据可视化,每一步都至关重要,最终确保了数据的准确性和可靠性。处理后的数据还可以导出为多种格式,便于在其他软件中进行进一步的处理或报告。希望这个案例能够帮助您更好地理解和应用Zygo中的数据处理与分析方法。

kkchenjj的博客 946

等保测评-瀚高数据库

一般适用于等保测评

m0_54146694的博客 1634

第三方数据库类库使用(FMDB)

下载地址:https://github.com/ccgus/fmdb

wanglong1121的专栏 1267

SpringBoot一次请求中缓存数据,请求结束就清除的4种方法,你会几种?

通过以上四种方法,你可以在 SpringBoot 的一次请求中缓存数据,并在请求结束后自动清除这些缓存数据。使用 ThreadLocal:适用于需要跨多个方法调用的缓存数据,灵活性高,但需要注意内存泄漏问题。使用 AOP:适用于全局性的缓存管理,代码更加优雅,但需要对 AOP 有一定的了解。使用 ServletRequestListener:适用于简单的请求生命周期管理,配置简单,但功能相对有限。使用 HttpServletRequest 的 setAttribute 和 getAttribute。

java专栏 1295

iOS - 数据持久化之 FMDB 的使用

上一篇文章「iOS - 使用 SQLite 数据库实现数据持久化」,介绍了如何使用 sqlite3 操作 SQLite 数据库实现增删改查。但是在代码编写的过程中,我们发现 sqlite3 需要调用大量的 C 语言函数,需要进行各种 C 语言类型到 OC 对象的转换,这会带来很多使用上的不便。 于是,经过查找发现了基于 sqlite3 封装的 FMDB,它能够较大程度地简化我们的代码,也就是本文将要介绍的内容。

Veggie的博客 1215

YOLO26轻量化科研实践:PartialConv驱动CSPCPC模块,让模型参数量直降1000W且精度不减

在目录下,新建AddModules文件夹,将cspcpc.py放入其中。

m0_71589036的博客 166

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【iOS】数据持久化(四)之FMDB基本使用

FMDB是iOS开发中的一个轻量级第三方数据库框架,它以OC的方式封装了SQLite的C语言接口,省去了冗余的C语言代码,且更加面向对象,操作方便FMDatabase:此类的一个实例代表一个SQLite数据库,也有许多执行SQL语句的方法FMResultSet(结果集):使用FMDatabase执行SQLite查询语句后的结果集FMDatabaseQueue(数据库队列):用于在多线程中执行多个查询或更新,它是线程安全的。

XY_Mckevince的博客 2154

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

数据持久化之FMDB简单使用

使用第三方库FMDB 1.创建.db文件,并取得路径 -(NSString *)getDBPath { NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, N

Nero的专栏 1501

visio安装包

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

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

iOS数据持久化(二)FMDB

FMDB。。。概念不细说,本篇只讲使用。 第一步:集成FMDB库 使用cocoaPods到入FMDB库,也可用将现有的库直接加入工程中 第二步:封装增、删、改、查的方法 新建单例FMDBManager,数据FMDBModel ###1.】FMDBModel.h @interface FMDBModel : NSObject @property(nonatomic,copy)NSString *...

hubangguo的博客 203

FMDB——本地数据持久化浅谈

FMDB 本地数据存 sqlite

cuimingran的专栏 546

数据库操作(使用FMDB)

iOS中原生的SQLite API在使用上相当不友好,在使用时,非常不便。于是,就出现了一系列将SQLite API进行封装的库,例如FMDB、PlausibleDatabase、sqlitepersistentobjects等,FMDB (https://github.com/ccgus/fmdb) 是一款简洁、易用的封装库,这一篇文章简单介绍下FMDB的使用。 在FMDB下载文件

mr_liu_easy_ios的博客 4242

使用第三方类库FMDB实现数据持久化

@SQLite是一种小型的轻量级的关系型数据库,在移动设备上使用是非常好的选择,无论是Android还是IOS,都内置了SQLite数据库,现在的版本都是SQLite3。在IOS中使用SQLite如果使用SDK提供的方法,特别麻烦也不利于理解和使用,感觉使用很不方便,今天就讲讲一个针对IOS的SQlite API封装的第三方库FMDB,FMDB对SDK中的API做了一层封装,使之使用OC来访问,使

glary 750

[iOS]数据库第三方框架FMDB详细讲解

[iOS]数据库第三方框架FMDB详细讲解 初识FMDB iOS中原生的SQLite API在进行数据存储的时候,需要使用C语言中的函数,操作比较麻烦。于是,就出现了一系列将SQLite API进行封装的库,例如FMDB、PlausibleDatabase、sqlitepersistentobjects等。 FMDB是一款简洁、易用的封装库。因此,在这里推荐使用第三方框架FMDB

江月夜 1418

FMDB数据持久化收藏功能

第一 : 1 把FMDB的第三方拖入到工程里面 创建DataModel 继承NSObject ,这个DataModel里面写的是解析的一些数据 在整个FMDB里面 属于表名 在DataModel里面必须定义一个NSInterger 类型的classID 属于主键ID @interface DataModel : NSObject @property(nonatomic,strong)NS...

weixin_43455462的博客 222

终极指南:使用Mantle和FMDB实现iOS模型持久化策略

Mantle是一个强大的Cocoa和Cocoa Touch模型框架,它极大地简化了iOS和macOS应用中的数据模型处理。本文将为您展示如何将Mantle与FMDB结合,构建高效的模型持久化解决方案。😊 ## 为什么选择Mantle进行模型管理? Mantle框架通过`MTLModel`基类提供了开箱即用的功能,包括自动实现的`NSCoding`、`NSCopying`、`isEqual:`

gitblog_01198的博客 384
上一篇: loadView,viewDidLoad,viewDidUnload什么时候被调用
下一篇: 下拉刷新和上拉加载更多原理
SMY_API
博客等级 码龄13年 5粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值