iOS 开发 数据库详解之FMDB
2016-11-30 08:52
495 查看
FMDB基本认知
FMDB是对iOS原生的SQLileSDK的封装,使用起来更加对象化FMDB主要涉及三个类
1>FMDatabase – 代表一个单线程下操作SQLite数据库,用来执行SQL语句.
2>FMResultSet – 代表FMDatabase 的一个SQL查询的结果集.需要遍历这个结果集,逐条取出数据.
3>FMDatabaseQueue – 如果你想在多个线程上执行数据库查询和更新的操作, 这个类会很有用.这个类管理一个串行队列和数据库对象,对数据库的操作都会添加到这个队列中一次执行.
和SQLileSDK一样都需要手动创建数据库并打开,操作数据库时依然需要些SQL语句.
FMDB结构图
主字段id自增
FMDatabaseQueue死锁现象
数据库的操作
打开数据库通过指定SQLite数据库文件路径来创建FMDatabase对象
FMDatabase *db = [FMDatabase databaseWithPath:path]; if (![db open]) { NSLog(@"数据库打开失败!"); }
文件路径有三种情况
(1)具体文件路径. 如果不存在会自动创建. (2)空字符串@"". 会在临时目录创建一个空的数据库. 当FMDatabase连接关闭时,数据库文件也被删除. (3)nil. 会创建一个内存中临时数据库,当FMDatabase连接关闭时,数据库会被销毁.
执行更新
在FMDB中,除查询以外的所有操作,都称为“更新”
create、drop、insert、update、delete等
使用executeUpdate:方法执行更新
- (BOOL)executeUpdate:(NSString*)sql, ... - (BOOL)executeUpdateWithFormat:(NSString*)format, ... - (BOOL)executeUpdate:(NSString*)sql withArgumentsInArray:(NSArray *)arguments
执行查询
查询方法
- (FMResultSet *)executeQuery:(NSString*)sql, ... - (FMResultSet *)executeQueryWithFormat:(NSString*)format, ... - (FMResultSet *)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray *)arguments
// 查询数据 FMResultSet *rs = [db executeQuery:@"SELECT * FROM t_student"];
// 遍历结果集 while ([rs next]) { NSString *name = [rs stringForColumn:@"name"]; int age = [rs intForColumn:@"age"]; double score = [rs doubleForColumn:@"score"]; }
#import "YYViewController.h" #import "FMDB.h" @interface YYViewController () @property(nonatomic,strong)FMDatabase *db; @end @implementation YYViewController - (void)viewDidLoad { [super viewDidLoad]; //1.获得数据库文件的路径 NSString *doc=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; NSString *fileName=[doc stringByAppendingPathComponent:@"student.sqlite"]; //2.获得数据库 FMDatabase *db=[FMDatabase databaseWithPath:fileName]; //3.打开数据库 if ([db open]) { //4.创表 BOOL result=[db executeUpdate:@"CREATE TABLE IF NOT EXISTS t_student (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL, age integer NOT NULL);"]; if (result) { NSLog(@"创表成功"); }else { NSLog(@"创表失败"); } } self.db=db; } -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [self delete]; [self insert]; [self query]; } //插入数据 -(void)insert { for (int i = 0; i<10; i++) { NSString *name = [NSString stringWithFormat:@"jack-%d", arc4random_uniform(100)]; // executeUpdate : 不确定的参数用?来占位 [self.db executeUpdate:@"INSERT INTO t_student (name, age) VALUES (?, ?);", name, @(arc4random_uniform(40))]; // [self.db executeUpdate:@"INSERT INTO t_student (name, age) VALUES (?, ?);" withArgumentsInArray:@[name, @(arc4random_uniform(40))]]; // executeUpdateWithFormat : 不确定的参数用%@、%d等来占位 // [self.db executeUpdateWithFormat:@"INSERT INTO t_student (name, age) VALUES (%@, %d);", name, arc4random_uniform(40)]; } } //删除数据 -(void)delete{ // [self.db executeUpdate:@"DELETE FROM t_student;"]; [self.db executeUpdate:@"DROP TABLE IF EXISTS t_student;"]; [self.db executeUpdate:@"CREATE TABLE IF NOT EXISTS t_student (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL, age integer NOT NULL);"]; } //查询 - (void)query{ // 1.执行查询语句 FMResultSet *resultSet = [self.db executeQuery:@"SELECT * FROM t_student"]; // 2.遍历结果 while ([resultSet next]) { int ID = [resultSet intForColumn:@"id"]; NSString *name = [resultSet stringForColumn:@"name"]; int age = [resultSet intForColumn:@"age"]; NSLog(@"%d %@ %d", ID, name, age); } } @end
参考:iOS开发数据库篇—FMDB简单介绍
相关文章推荐
- iOS数据库开发之SQLite和FMDB详解(附Demo)
- iOS开发中使用FMDB的网文iOS 使用FMDB进行数据库操作
- ios开发FMDB导入SQLCipher加密数据库
- iOS开发-进阶:数据库操作(使用FMDB)
- iOS开发(OC)——FMDB数据库的使用
- ios开发FMDB导入SQLCipher加密数据库
- iOS开发数据库篇—FMDB数据库队列
- iOS开发-数据库FMDB简单介绍
- iOS项目开发中常用到的数据库之FMDB的使用
- ios开发——详解sqlite数据库,封装数据库操作
- iOS开发数据库篇—FMDB数据库队列
- iOS开发—数据库FMDB简单介绍
- iOS开发数据库篇—FMDB数据库队列
- Objective-C ,ios,iphone开发基础:使用第三方库FMDB连接sqlite3 数据库,实现简单的登录
- Objective-C ,ios,iphone开发基础:使用第三方库FMDB连接sqlite3 数据库,实现简单的登录
- ios开发FMDB导入SQLCipher加密数据库
- IOS开发-封装数据库sqlite3之为何选择FMDB
- iOS开发数据库-FMDB
- iOS开发——数据库(FMDB框架的使用)