使用FMDB第三方写简单的demo

首先介绍一下这个第三方的框架

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;
    }
 
 

执行更新

一切不是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);
    }
}

执行查询

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

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

举个例子:
-(NSMutableArray *)selectAllStudents
{
    FMResultSet *set = [_db executeQuery:@"select * from student"];
    return [self selectAllStudentsHelper:set];
}

为了数据查找的通用性,写了一个通用方法查找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;
}

FMResultSet  提供了很多方法来获得所需的格式的值:
     intForColumn:
    longForColumn:
    longLongIntForColumn:
    boolForColumn:
    doubleForColumn:
    stringForColumn:
    dataForColumn:
    dataNoCopyForColumn:
    UTF8StringForColumnIndex:
    objectForColumn:

简单操作例子下载: 点击打开链接
--------------- ---------------------------------------------------------------------------------------------------------------------------------------
事务 线程等操作稍后更新
------------------------------------------------------------------------------------------------------------------------------------------------------


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值