IOS操作数据库,SQLite3和coredata是两个非常好的选择,但是对于我们这些掌握了其他数据库语言的人来说,使用这两中操作都 会觉得不方便,SQLite3使用起来太复杂了,而使用coredata的时候却封装太死了,我们需要自己些自己的数据库语句,这时候,FMDB就是一个 非常不错的选择!
什么是FMDB
FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API
FMDB的优点
使用起来更加面向对象,省去了很多麻烦、冗余的C语言代码 对比苹果自带的Core Data框架,更加轻量级和灵活 提供了多线程安全的数据库操作方法,有效地防止数据混乱
FMDB有三个主要的类
①FMDatabase一个FMDatabase对象就代表一个单独的SQLite数据库 用来执行SQL语句
②FMResultSet使用FMDatabase执行查询后的结果集
③FMDatabaseQueue用于在多线程中执行多个查询或更新,它是线程安全的
————————————————————————
具体使用
1、导入头文件
#import "FMDatabase.h"
2、定义成员变量
FMDatabase* _db;
3、创建数据库.db文件
NSString* path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/data.db"];
4、用path路径初始化FMDatabase
_db = [[FMDatabase alloc] initWithPath:path];
5、打开数据库[_db open]
//打开数据库
BOOL res = [_db open];
if (res == NO) {
NSLog(@"打开失败");
return;
}
6、创建表
res = [_db executeUpdate:@"create table if not exists USER(id integer primary key autoincrement,name,score,p_w_picpath)"];
if (res == NO) {
NSLog(@"创建表失败");
}
7、关闭数据库
[_db close];
8、增加操作
//FMDB支持类型 NSString NSNumber NSData
将数据转化为能够存储进数据库的类型
NSData* p_w_picpathData = UIImagePNGRepresentation(_p_w_picpathView.p_w_picpath);
NSString* name = _nameField.text;
NSNumber* score = [NSNumber numberWithInt:[_scoreField.text intValue]];
//打开数据库
BOOL res = [_db open];
if (res == NO) {
NSLog(@"打开失败");
}
//插入数据
res = [_db executeUpdate:@"insert into USER(name,score,p_w_picpath) values(?,?,?)", name, score, p_w_picpathData];
if (res == NO) {
NSLog(@"插入数据失败");
}
[_db close];
9、删除操作
//删
- (void)del:(id)sender{
BOOL res = [_db open];
if (res == NO) {
NSLog(@"打开失败");
return;
}
res = [_db executeUpdate:@"delete from USER where name=?", _nameField.text];
if (res == NO) {
NSLog(@"删除失败");
}
[_db close];
}
10、查询操作
//查
- (void)fetch:(id)sender{
BOOL res = [_db open];
if (res == NO) {
NSLog(@"打开失败");
return;
}
FMResultSet* set = [_db executeQuery:@"select * from USER"];
while ([set next]) {
//取值
NSString* name = [set stringForColumn:@"name"];
int score = [set intForColumn:@"score"];
NSData* data = [set dataForColumn:@"p_w_picpath"];
NSLog(@"%@ --- %d", name, score);
//[set objectForColumnName:@"score"];
}
[_db close];
}
——————————————————————————————————————
多线程管理FMDB:
FMDatabase这个类是线程不安全的,如果在多个线程中同时使用一个FMDatabase实例,会造成数据混乱等问题
为了保证线程安全,FMDB提供方便快捷的FMDatabaseQueue类
使用FMDatabaseQueue很简单,首先用一个数据库文件地址来初使化FMDatabaseQueue,然后就可以将一个闭包(block)传入inDatabase方法中。在闭包中操作数据库,而不直接参与FMDatabase的管理。
FMDatabaseQueue的创建
FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:path];
简单使用 [queue inDatabase:^(FMDatabase *db) {
[db executeUpdate:@"INSERT INTO t_student(name) VALUES (?)", @"Jack"];
[db executeUpdate:@"INSERT INTO t_student(name) VALUES (?)", @"Rose"];
[db executeUpdate:@"INSERT INTO t_student(name) VALUES (?)", @"Jim"];
FMResultSet *rs = [db executeQuery:@"select * from t_student"];
while ([rs next]) {
// …
}
}];
FMDB数据库
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
十进制转十六进制的C语言实现
OnlyOpera
2019-02-23 13:37:36
C语言指针函数和函数指针
窈窕魑魅
2019-02-23 13:14:47
C语言中的FILE结构
窈窕魑魅
2019-02-23 13:14:46
C语言改写的飞机小游戏
計科150809212
2019-02-23 12:53:25
Redis 学习笔记
jasonhow
2019-02-23 00:39:36
C语言变量存储类型auto static extern static extern register
nickybeidi
2019-02-23 00:34:31
java性能优化笔记(二)设计优化
kid2412
2019-02-24 13:34:37
java多线程之Semaphore信号量详解
ketqi
2019-02-23 13:33:26
Java多线程之ExecutorService
myfuxing
2019-02-23 13:14:09
java多线程之fork/join框架详解
ketqi
2019-02-23 12:57:20
java多线程之CountDownLatch倒数闸门
ketqi
2019-02-23 12:57:05