iOS第三方之FMDB

移动开发 iOS
FMDatabase – 表示一个单独的SQLite数据库。 用来执行SQLite的命令,FMResultSet – 表示FMDatabase执行查询后结果集。FMDatabaseQueue – 如果你想在多线程中执行多个查询或更新,你应该使用该类。这是线程安全的

FMDB有三个主要的类

1.FMDatabase – 表示一个单独的SQLite数据库。 用来执行SQLite的命令。

2.FMResultSet – 表示FMDatabase执行查询后结果集

3.FMDatabaseQueue – 如果你想在多线程中执行多个查询或更新,你应该使用该类。这是线程安全的。

 

数据库创建

创建FMDatabase对象时参数为SQLite数据库文件路径。该路径可以是以下三种之一:

1..文件路径。该文件路径无需真实存,如果不存在会自动创建。

2..空字符串(@”")。表示会在临时目录创建一个空的数据库,当FMDatabase 链接关闭时,文件也被删除。

3.NULL. 将创建一个内在数据库。同样的,当FMDatabase连接关闭时,数据会被销毁。

如需对临时数据库或内在数据库进行一步了解,请继续阅读:点击打开链接

 

打开数据库

在和数据库交互 之前,数据库必须是打开的。如果资源或权限不足无法打开或创建数据库,都会导致打开

<pre name="code" class="objc">    if (![_db open]) { 
        NSLog(@"数据库打开失败"); 
        return NO; 
    } 
  • 1.
  • 2.
  • 3.
  • 4.

执行更新

一切不是SELECT命令的命令都视为更新。这包括  CREATE, UPDATE, INSERT,ALTER,COMMIT, BEGIN, DETACH, DELETE, DROP, END, EXPLAIN, VACUUM, and REPLACE  (等)。

简单来说,只要不是以SELECT开头的命令都是UPDATE命令。

 

执行更新返回一个BOOL值。YES表示执行成功,否则表示有那些错误 。你可以调用 -lastErrorMessage 和 -lastErrorCode方法来得到更多信息。

举个例子:插入一个Student数据

// 两种写sql语句方式 
 
NSString *sqlStr = [NSString stringWithFormat:@"insert into student values ('%@', '%@', '%@')", student.number, student.name, student.age]; 
    NSLog(@"%@", sqlStr); 
    BOOL result = [_db executeUpdate:sqlStr];<pre name="code" class="objc" style="color: rgb(51, 51, 51); font-size: 14px; line-height: 25px;">//    BOOL result = [_db executeUpdate:@"insert into student (number, name, age) values (?,?,?)", student.number, student.name, student.age]; 
 
[self judgeDBError:result action:DATABASE_INSERT]; return result; 
 
 
/** 
*  打印执行SQL语句的状态 
* 
*  @param judge    SQL语句的执行:成功(YES)/失败(NO) 
*  @param action   SQL语句的相关操作:创建/插入/查询/删除 
*/ 
-(void)judgeDBError:(BOOL)judge action:(NSString *)action 

    if (!judge && [self.db hadError]) { 
        //如果有错误,打印错误信息 
        NSLog(@"%@失败:%@",action,[self.db lastError]); 
    } 
    else 
    { 
        NSLog(@"%@成功",action); 
    } 

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.

执行查询

SELECT命令就是查询,执行查询的方法是以 -excuteQuery开头的。

 

执行查询时,如果成功返回FMResultSet对象, 错误返回nil. 与执行更新相当,支持使用 NSError**参数。同时,你也可以使用 -lastErrorCode和-lastErrorMessage获知错误信息。

FMResultSet *s = [db executeQuery:@"SELECT * FROM myTable"];    
while ([s next]) {    
    //retrieve values for each record    

  • 1.
  • 2.
  • 3.
  • 4.

举个例子:

-(NSMutableArray *)selectAllStudents 

    FMResultSet *set = [_db executeQuery:@"select * from student"]; 
    return [self selectAllStudentsHelper:set]; 

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

为了数据查找的通用性,写了一个通用方法查找Student数据

(NSMutableArray *)selectAllStudentsHelper:(FMResultSet *)FMSet; 
 
-(NSMutableArray *)selectAllStudentsHelper:(FMResultSet *)FMSet 

    NSMutableArray * selectResult = [NSMutableArray array]; 
    while ([FMSet next]) { 
        Student * stu = [[Student alloc] init]; 
         
        stu.number = [FMSet stringForColumn:@"number"]; 
        stu.name = [FMSet stringForColumn:@"name"]; 
        stu.age = [FMSet stringForColumn:@"age"]; 
        /** 
         *  各种不同类型的值有不同的取法. 
         *        int a = [FMSet intForColumn:@"a"], 
         * NSString * b = [FMSet stringForColumn:@"b"], 
         *   NSData * c = [FMSet dateForColumn:@"c"], 
         *      float d = [FMSet doubleForColumn:@"d"], 
         */ 
        [selectResult addObject:stu]; 
    } 
    return selectResult; 

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.

FMResultSet  提供了很多方法来获得所需的格式的值:

    intForColumn:

    longForColumn:

    longLongIntForColumn:

    boolForColumn:

    doubleForColumn:

    stringForColumn:

    dataForColumn:

    dataNoCopyForColumn:

    UTF8StringForColumnIndex:

    objectForColumn:

本文链接:http://my.oschina.net/CgShare/blog/293635

责任编辑:chenqingxiang 来源: oschina
相关推荐

2015-11-05 16:44:37

第三方登陆android源码

2021-12-06 09:44:30

鸿蒙HarmonyOS应用

2011-08-15 17:20:25

iPhone应用Sqlite3FMDB

2012-03-01 20:42:12

iPhone

2013-08-14 09:50:32

iOS类库

2018-09-30 15:18:29

2019-07-30 11:35:54

AndroidRetrofit

2019-09-03 18:31:19

第三方支付电商支付行业

2011-08-05 16:50:00

iPhone 数据 Sqlite

2013-01-15 13:50:22

iOS开发开源库

2012-05-24 21:59:55

iOS

2015-07-13 13:34:13

ios第三方库xcode插件

2009-12-31 14:38:34

Silverlight

2017-12-11 15:53:56

2016-10-21 14:09:10

2013-08-12 16:04:19

第三方移动应用

2021-09-26 10:43:08

注册Istio集成

2009-01-14 12:45:05

MSNIM苹果

2017-05-16 13:24:02

LinuxCentOS第三方仓库

2014-07-22 10:56:45

Android Stu第三方类库
点赞
收藏

51CTO技术栈公众号