使用FMDB框架来加载数据库

1、打开数据库

    先要获取沙盒的数据库文件名,并创建数据库文件名,定数据库:

    @property (nonatomic, strong) FMDatabase *db;

    // 0.获得沙盒中的数据库文件名

    NSString *filename = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 

    NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"student.sqlite"];

   // 1.创建数据库实例对象

    self.db = [FMDatabase databaseWithPath:filename];

   // 2.打开数据库

    if ( [self.db open] ) {

        NSLog(@"数据库打开成功");

    // 创表

      BOOL result = [self.db executeUpdate:@"create table if not exists t_student (id integer primary key    autoincrement, name text, age integer);"];

if (result) {

            NSLog(@"创表成功");

        } else {

            NSLog(@"创表失败");

        }

    } else {

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

}

2、FMDB的核心类

    FMDB有三个主要的类:

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

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

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

3、执行更新

     使用executeUpdate:方法执行更新:

         - (BOOL)executeUpdate:(NSString*)sql, ...  // 添加数据库更新语句,除了查找,其他都用更新语句

         - (BOOL)executeUpdateWithFormat:(NSString*)format, ...

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

4、执行查询

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

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

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

   示例:

          // 查询数据

         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"];

       }

5、FMDB事务的使用

     // 开启事务

     [db beginTransaction];

     //  [db executeUpdate:@"begin transaction;"];

     // 更新数据

      [db executeUpdate:@"update t_student set age = ? where name = ?;", @20, @"jack"];

     [db executeUpdate:@"update t_student set age = ? where name = ?;", @20, @"jack"];

     // 提交事务

      [db commit]; 

     //[db executeUpdate:@"commit transaction;"];

 注意:其中有一条失败了,就会出错,发现情况不对,可以使用回滚事务:

        if (发现情况不对)

         {

            // 回滚事务

            [db rollback]; 

           // [db executeUpdate:@"rollback transaction;"];

          }

posted @ 2014-06-29 23:33  在bug中前行  阅读(275)  评论(0编辑  收藏  举报