ios iOS第三方框架使用技巧

iOS-FMDB 基础用法

2016-06-29  本文已影响668人  它是一只肥猫

github链接地址 https://github.com/ccgus/fmdb
文顶http://www.cnblogs.com/wendingding/p/3871848.html>
http://www.sqlite.org/inmemorydb.html

1.FMDB

FMDB是iOS平台对 SQLite数据库框架以OC(面向对象)的方式进行封装的API.

2.FMDB 三大核心类
1. FMDatabase     一个FMDatabase 对象代表一个SQLite数据库,用来执行SQL语句。
2. FMResultSet    一个FMResultSet的对象,代表使用FMDatabase执行查询后的结果集。
3. FMDatabaseQueue     它用于在多线程中执行多个查询或更新,它是线程安全的。
3.数据库的创建

一个FMDatabase 对象可以由 SQLite数据库文件路径创建。这个路径可以由以下三种方式创建:
1.系统文件路径,这个路径不必一定存在,如果该路径不存在,它会帮你创建一个该路径的文件;
2.如果是一个空的字符串(@""),那么在当前路径下会为你创建一个暂时的空的数据库,当FMDatabase连接关闭时,数据库会被删除;
3.如果是null, 在内存中创建一数据库,当FMDatabase连接关闭时,数据库会被销毁。
-注释 :

     1.  NSString *path = [NSTemporaryDirectory() stringByAppendingPathComponent:@"tmp.db"];
//创建数据库
FMDatabase *db = [FMDatabase databaseWithPath:path];
//打开数据库(在使用数据库之前,必须确保数据库是打开的)
if (![db open]){
    // 打开失败
    db = nil;return;
}
2.执行更新数据的语句
//SQL语句中除了SELECT语句,其他任何语句都有更新数据库的作用,包括(CREATE, UPDATE, INSERT, ALTER, COMMIT, BEGIN, DETACH, DELETE, DROP, END, EXPLAIN, VACUUM, and REPLACE)。意思是只要SQL语句不是SELECT开始的语句,都是更新语句。
3.执行查询
//SELECT语句通过执行一次executeQuery...方法进行一次查询。
//执行的查询语句,如果执行成功的返回值是一个FMResultSet集合,如果执行失败可以使用-lastErrorMessage和-lastErrorCode方法确定为什么查询失败。
//可以用while()循环遍历你的查询结果,
FMResultSet *resultSet = [db executeQuery:@"SELECT  * FROM myTable"];
while ([resultSet next]){
    // 检索每个值
}
// 在查询结果集时,即使你只需要其中一个值,你也必须调用-[FMResultSet next]这个方法,去查找其中的一个值
FMResultSet *s = [db executeQuery:@"SELECT COUNT(*) FROM myTable"];
if ([s next]) {
    int totalCount = [s intForColumnIndex:0];
}
//FMResultSet 有很多不同的数据格式的方法去检索结果集中的数据:
  intForColumn:
  longForColumn:
  longLongIntForColumn:
  boolForColumn:
  doubleForColumn:
  stringForColumn:
  dateForColumn:
  dataForColumn:
  dataNoCopyForColumn:
  UTF8StringForColumnName:
  objectForColumnName:

//通常情况下,不必手动关闭FMResultSet,因为当任何一个结果集被释放或者父数据库被关闭时,FMResultSet会自动关闭。
4.关闭数据库
// 当执行完数据库查询或者更新时,应该手动关闭数据库,调用d -close方法,关闭数据库后SQLite 将会释放在执行过程中获取的所有数据。
[db close];
5.数据处理
// FMDatabase 能够调用一定方法去开始或者结束处理数据
4. 多语句操作和批量处理数据
//使用 FMDatabase's executeStatements:withResultBlock: 的语句处理多个SQL语句
NSString *sql = @"create table test1 (id integer primary key autoincrement , x test );
                  create table test2 (id integer primary key autoincrement , y test );
                  insert into test1 (x) values ('XXX');
                  insert into test2 (y) values ('YYY');";// 创建表名分别为test1 、test2 、test 3的表,autoincrement 自动增量为主键;insert into 往表test1 插入数据 
success = [db execteStatements:sql];
sql = @"select count(*) as count from test1;
        select count(*) as count from test2";
success = [self.db execteStatements:sql withResultBlock:^int(NSDictionary *dictionary) {
NSInteger count = [dictionary[@"count"] integerValue];
return 0;
}];]
5.数据处理
// 如果FMDB的执行语句是SQL语句,那么在插入之前不需要做任何处理,只需要使用标准化的SQL语法的语句
// 插入数据的语法,?该字符在SQLite语句中被用来作为占位符,作为要插入的值,
INSERT INTO myTable VALUES (? ,?, ?, ?);

二、其他

1、优点:
使用起来更加面向对象,省去了很多麻烦、冗余的C语言代码
对比苹果自带的Core Data框架,更加轻量级和灵活
提供了多线程安全的数据库操作方法,有效地防止数据混乱
2、FM Database这个类是线程不安全的,如果在多个线程中同时使用一个FMDatabase实例,会造成数据混乱等问题,为了保证线程安全,FMDB提供方便快捷的FMDatabaseQueue。

三、FMDB的一些实用的用法总结

1、 用一个唯一的主键来标记数据模型,可以更好的实现查询、插入、删除数据,这是最近做开发一个单机版的项目用到FMDB的总结。
总的来说,FMDB在项目中使用的话,还是相对比较简单的,就是处理复杂的逻辑关系时比较繁琐。
附上能够简单使用的FMDB的封装:

用过FMDB 之后,觉得其实这个框架并不是很难,一般运用也只会用到一些简单的方法,我在使用的时候有很多需求不会写SQL语句的时候就去http://www.w3school.com.cn/sql/index.asp
然后执行久行了,大家可以尝试一下,有什么更好的运用和比较坑的地方都可以告诉我,毕竟坑不踩就不是坑了🐤。有点乱,以后再整理吧。😅

上一篇下一篇

猜你喜欢

热点阅读