iOS中原生的SQLite API在使用上相当不友好,在使用时,非常不便。于是,就出现了一系列将SQLite API进行封装的库,例如FMDB、PlausibleDatabase、sqlitepersistentobjects等,FMDB (https://github.com/ccgus/fmdb) 是一款简洁、易用的封装库,这一篇文章简单介绍下FMDB的使用。
一、介绍
1.首先下载FMDB文件,导入工程,并使用 libsqlite3.dylib 依赖包。
FMDB同时兼容ARC和非ARC工程,会自动根据工程配置来调整相关的内存管理代码。
2.FMDB常用类:
FMDatabase : 一个单一的SQLite数据库,用于执行SQL语句。
FMResultSet :执行查询一个FMDatabase结果集,这个和android的Cursor类似。
FMDatabaseQueue :在多个线程来执行查询和更新时会使用这个类。
二、FMDataBase
//1、创建全局FMDatabase
@property (nonatomic, strong) FMDatabase *db;
<span style="font-size:18px;">//2.创建数据库
// 获得沙盒中的数据库文件名
NSString *filename = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"student.sqlite"];
//创建数据库实例对象
self.db = [FMDatabase databaseWithPath:filename];
//打开数据库
if ( [self.db open] ) {
NSLog(@"数据库打开成功");
//3.创建数据库表
BOOL result = [self.db executeUpdate:@"create table if not exists <span style="font-family: Arial, Helvetica, sans-serif;">表名 </span><span style="font-family: Arial, Helvetica, sans-serif;"> (id integer primary key autoincrement, name text, age integer);"];</span>
if (result) {
NSLog(@"创表成功");
} else {
NSLog(@"创表失败");
}
} else {
NSLog(@"数据库打开失败");
}</span>
//4.插入数据
- (void)insert
{
NSString *name = [NSString stringWithFormat:@"Name%d", arc4random() % 1000];
NSNumber *age = @(arc4random() % 80 + 1);
[self.db executeUpdate:@"insert into 表名 (name, age) values (?, ?);", name, age];
}
<span style="font-size:18px;">//5更新数据
- (void)update
{
[self.db executeUpdate:@"update</span><span style="font-size:14px;"> <span style="font-family: Arial, Helvetica, sans-serif;">表名 </span><span style="font-family: Arial, Helvetica, sans-serif;">set age = ? where name = ?;", @20, @"jack"];</span></span><span style="font-size:18px;">
}</span>
<span style="font-size:18px;">//6查询数据
- (IBAction)query
{ //创建一个结果集
FMResultSet *rs = [self.db executeQuery:@"select * from <span style="font-family: Arial, Helvetica, sans-serif;">表名</span><span style="font-family: Arial, Helvetica, sans-serif;"> where age > ?;", @50];</span>
// 2.遍历结果集
while (rs.next) {
int ID = [rs intForColumn:@"id"];
NSString *name = [rs stringForColumn:@"name"];
int age = [rs intForColumn:@"age"];
NSLog(@"%d %@ %d", ID, name, age);
}
}</span>