iOS中的数据库—使用FMDB

一、回顾 iOS中的数据存储方式

 

 1、XML属性列表(plist)

 写入OC的一些基本数据类型,不是所有对象都可以写入

 

 2、Preference(偏好设置)

 本质还是通过“plist”来存储数据,但是使用简单(无需关注文件、文件夹路径和名称)

 

 3、NSKeyedArchiver归档(NSCoding)

 把任何对象,直接保存为文件的方式;

 

 4、SQLite3

 当非常大量的数据存储时使用;

 

 5、CoreData

就是 iOS对SQLite的封装。

 

 

 

二、FMDB介绍

 

1.FMDB

 

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

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

 

2、FMDB的优点 

 

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

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

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

 

 

3、FMDB三个主要的类 

(1)FMDatabase 

   一个FMDatabase对象就代表一个单独的SQLite数据库,用来执行SQL语句

 

(2)FMResultSet 

   使用FMDatabase执行查询后的结果集

 

(3)FMDatabaseQueue 

   用于在多线程中执行多个查询或更新,它是线程安全的

 

 

 

三、打开数据库(可以建立管理工具类单例)

 

1、通过指定SQLite数据库文件路径来创建FMDatabase对象

 

(1)FMDatabase *db = [FMDatabase databaseWithPath:path];

  if (![db open]) {

      NSLog(@"数据库打开失败!");

  }

 

2、文件路径path有三种情况

 

(1)具体文件路径

  如果不存在会自动创建

 

(2)空字符串@""

  会在临时目录创建一个空的数据库

  当FMDatabase连接关闭时,数据库文件也被删除

 

(3)nil

  会创建一个内存中临时数据库,当FMDatabase连接关闭时,数据库会被销毁

 

 

 

四、更新操作(FMDatabase)

 

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

   create、drop、insert、update、delete等

 

2、使用 executeStatements (可以一次执行多条SQL语句)

 

- (BOOL)executeStatements:(NSString *)sql

- (BOOL)executeStatements:(NSString *)sql withResultBlock:

    

 

3、使用executeUpdate(一次执行一条SQL语句,可带参数(SQL的预编译))

 

- (BOOL)executeUpdate:(NSString*)

- (BOOL)executeUpdateWithFormat:(NSString*)format

- (BOOL)executeUpdate:(NSString*)sql withArgumentsInArray:(NSArray *)arguments

 

示例

[db executeUpdate:@"UPDATE t_student SET age = ? WHERE name = ?;", @20, @"Jack"]

 

 

 

五、执行查询(FMDatabase)

 

1、查询方法

 

- (FMResultSet *)executeQuery:(NSString*)sql

- (FMResultSet *)executeQueryWithFormat:(NSString*)format

- (FMResultSet *)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray *)arguments

 

示例

// 查询数据

FMResultSet  * rs = [db executeQuery:@"SELECT * FROM t_student"];

 

 

六、关于FMDatabaseQueue

 

1、提供一些同步队列操作数据库的方法

 

(1)- (void)inDatabase:(void (^)(FMDatabase *db))block  

(2)- (void)inTransaction:(void (^)(FMDatabase *db, BOOL *rollback))block  回调中创建了FMDatabase类型的数据库,可以直接拿来用

 

2、提供事务操作方式:

 

(1)快速实现插入操作

(2)实现备份回滚

   rollBack.memory = true

(3)保证同时执行 : Transaction.begin 和Transaction.commit 之间的代码保证同时执行完毕才生效

 

 

七、关于FMResultSet结果集

 

1、一些方法围绕“Column”的方法,可以根据列进行不同的操作,返回不同的搜索结果

  objectForColumn:

  intForColumn:

  longForColumn:

  longLongIntForColumn:

  boolForColumn:

  doubleForColumn:

  stringForColumn:

  dateForColumn:

  dataForColumn:

  dataNoCopyForColumn:

  UTF8StringForColumnIndex:

 

 

2、next,判断结果及是否有下一个元素

(1)遍历结果集

  while ([rs next]) {

      NSString *name = [rs stringForColumn:@"name"];

      int age = [rs intForColumn:@"age"];

      double score = [rs doubleForColumn:@"score"];

  }

 

posted @ 2016-04-24 18:54  执着的怪味豆  阅读(702)  评论(1编辑  收藏  举报