FMDB的简述和简单使用

一、FMDB的概念

1.什么是FMDB?

(1)FMDB是iOS平台的SQLite数据库框架

(2)FMDB以OC的方式封装了SQLite的C语言API

2.FMDB的优点

(1)使用起来更加面向对象,省去了很多麻烦、冗余C语言代码

(2)对比苹果自带的Core Data框架,更加轻量级和灵活

(3)提供了多线程安全的数据库操作方法,有效地防止数据混乱

二、核心类

FMDB有三个主要的类

(1)FMDatabase
  • 一个FMDatabase对象就代表一个单独的SQLite数据库

  • 用来执行SQL语句

(2)FMResultSet
  • 使用FMDatabase执行查询后的结果集
(3)FMDatabaseQueue
  • 用于在多线程中执行多个查询或更新,它是线程安全的

三、打开数据库

1.通过制定SQLite数据库文件路径创建FMDatabase对象

FMDatabase *db = [FMDatabase databaseWithPath:path];
if(![db open]){ NSLog(@"数据库打开失败"); }

2.文件路径有三种情况

1.具体文件路径
  • 如果不存在会自动创建
2.空字符串
  • 会在临时目录创建一个空的数据库
  • 当FMDatabase连接关闭时,数据文件也被删除
3.nil
  • 会创建一个内存中临时数据库,当FMDatabase连接关闭时,数据库会被销毁

四、执行更新

1.在FMDB中,除查询以外的所有操作,都成为“更新”

  • create、drop、insert、update、delete等

2.使用executeUpdate:方法执行更新

  • -(BOOL)executeUpdate: (NSString *)sql,...
  • -(BOOL)executeUpdateWithFormat: (NSString *)format,...
  • -(BOOL)executeUpdate: (NSString *)sql WithArgumentsInArray:(NSArray *)arguments

五、执行查询

1.查询方法

  • -(FMResultSet *)executeQuery: (NSString *)sql,...
  • -(FMResultSet *)executeQueryWithFormat: (NSString *)format,...
  • -(FMResultSet *)executeQuery:(NSString *)sql withArgumentsInArray: (NSArray *)arguments

2.示例

//查询数据
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"]; }

六、FMDatabaseQueue

1.FMDatabase这个类是线程不安全的,如果在多个线程中同时使用一个FMDatabase实例,会造成数据混乱等问题
2.为了保证线程安全,FMDB提供方便快捷的FMDatabaseQueue类
3.FMDatabaseQueue的创建
FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:path];
4.简单使用

``[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]){
//...

}
}];``

5.使用事务

[queue inTransaction:^(FMDatabase * db, BOOL *rollback){ [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]){ //... } }];

6.回滚
*rollback = YES;

你可能感兴趣的:(FMDB的简述和简单使用)