首页
/ FMDB 开源项目教程

FMDB 开源项目教程

2024-08-10 10:52:51作者:胡唯隽

项目介绍

FMDB 是一个 iOS 平台的 SQLite 数据库框架,它以 Objective-C 的方式封装了 SQLite 的 C 语言 API。FMDB 提供了更加面向对象的数据库操作方式,简化了 SQLite 的使用,同时支持 ARC 和非 ARC 工程,自动根据工程配置调整内存管理代码。

项目快速启动

安装 FMDB

首先,通过 CocoaPods 安装 FMDB:

pod 'FMDB'

在终端中运行以下命令来安装依赖:

pod install

创建数据库

在项目中引入 FMDB 头文件:

#import "FMDB.h"

创建数据库并打开:

NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
NSString *dbPath = [documentsPath stringByAppendingPathComponent:@"myDatabase.db"];
FMDatabase *db = [FMDatabase databaseWithPath:dbPath];

if ([db open]) {
    NSLog(@"数据库打开成功");
} else {
    NSLog(@"数据库打开失败");
}

执行 SQL 语句

创建表并插入数据:

NSString *createTableSQL = @"CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)";
if ([db executeUpdate:createTableSQL]) {
    NSLog(@"表创建成功");
} else {
    NSLog(@"表创建失败");
}

NSString *insertSQL = @"INSERT INTO users (name, age) VALUES (?, ?)";
if ([db executeUpdate:insertSQL, @"Alice", @25]) {
    NSLog(@"数据插入成功");
} else {
    NSLog(@"数据插入失败");
}

查询数据

查询表中的数据:

NSString *querySQL = @"SELECT * FROM users";
FMResultSet *resultSet = [db executeQuery:querySQL];

while ([resultSet next]) {
    NSString *name = [resultSet stringForColumn:@"name"];
    int age = [resultSet intForColumn:@"age"];
    NSLog(@"Name: %@, Age: %d", name, age);
}

应用案例和最佳实践

多线程操作

为了确保多线程环境下的数据安全,可以使用 FMDatabaseQueue

FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:dbPath];

[queue inDatabase:^(FMDatabase *db) {
    [db executeUpdate:@"INSERT INTO users (name, age) VALUES (?, ?)", @"Bob", @30];
    FMResultSet *resultSet = [db executeQuery:@"SELECT * FROM users"];
    while ([resultSet next]) {
        NSString *name = [resultSet stringForColumn:@"name"];
        int age = [resultSet intForColumn:@"age"];
        NSLog(@"Name: %@, Age: %d", name, age);
    }
}];

事务处理

使用事务可以提高数据库操作的效率:

[queue inTransaction:^(FMDatabase *db, BOOL *rollback) {
    [db executeUpdate:@"INSERT INTO users (name, age) VALUES (?, ?)", @"Charlie", @35];
    [db executeUpdate:@"INSERT INTO users (name, age) VALUES (?, ?)", @"David", @40];
    
    // 如果发生错误,回滚事务
    if (/* some error condition */) {
        *rollback = YES;
        return;
    }
}];

典型生态项目

SQLite.swift

SQLite.swift 是一个用于 Swift 语言的 SQLite 数据库封装库,提供了类型安全的查询和更新操作。

Core Data

Core Data 是苹果官方提供的数据持久化框架,虽然功能强大,但相对复杂。FMDB 可以作为 Core Data 的替代方案,特别是在需要轻量级数据库操作时。

Realm

Realm 是一个移动端数据库,提供了比 SQLite 更高级的面向对象的数据库操作方式,适用于需要高性能和复杂数据模型的应用场景。

通过以上内容,您可以快速上手 FMDB 并了解其在实际开发中的应用和最佳实践。

项目优选

收起
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
33
24
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
828
0
redis-sdkredis-sdk
仓颉语言实现的Redis客户端SDK。已适配仓颉0.53.4 Beta版本。接口设计兼容jedis接口语义,支持RESP2和RESP3协议,支持发布订阅模式,支持哨兵模式和集群模式。
Cangjie
376
32
advanced-javaadvanced-java
Advanced-Java是一个Java进阶教程,适合用于学习Java高级特性和编程技巧。特点:内容深入、实例丰富、适合进阶学习。
JavaScript
75.92 K
19.09 K
qwerty-learnerqwerty-learner
为键盘工作者设计的单词记忆与英语肌肉记忆锻炼软件 / Words learning and English muscle memory training software designed for keyboard workers
TSX
15.62 K
1.45 K
easy-eseasy-es
Elasticsearch 国内Top1 elasticsearch搜索引擎框架es ORM框架,索引全自动智能托管,如丝般顺滑,与Mybatis-plus一致的API,屏蔽语言差异,开发者只需要会MySQL语法即可完成对Es的相关操作,零额外学习成本.底层采用RestHighLevelClient,兼具低码,易用,易拓展等特性,支持es独有的高亮,权重,分词,Geo,嵌套,父子类型等功能...
Java
19
2
杨帆测试平台杨帆测试平台
扬帆测试平台是一款高效、可靠的自动化测试平台,旨在帮助团队提升测试效率、降低测试成本。该平台包括用例管理、定时任务、执行记录等功能模块,支持多种类型的测试用例,目前支持API(http和grpc协议)、性能、CI调用等功能,并且可定制化,灵活满足不同场景的需求。 其中,支持批量执行、并发执行等高级功能。通过用例设置,可以设置用例的基本信息、运行配置、环境变量等,灵活控制用例的执行。
JavaScript
9
1
Yi-CoderYi-Coder
Yi Coder 编程模型,小而强大的编程助手
HTML
57
7
RuoYi-VueRuoYi-Vue
🎉 基于SpringBoot,Spring Security,JWT,Vue & Element 的前后端分离权限管理系统,同时提供了 Vue3 的版本
Java
147
26
markdown4cjmarkdown4cj
一个markdown解析和展示的库
Cangjie
10
1