ARC 和 MRC

FMDB作为一个优秀的通用第三方数据库框架,无论在ARC还是MRC下,都可以自动匹配。

使用

在FMDB中,有三个重要的类:

  • FMDatabase:是一个提供SQLite数据库的类,每一个SQLite的对象对应一个数据库,用于执行SQL语句。
  • FMResultSet:在FMDatabase中用于执行查询结果的类
  • FMDatabaseQueue:在多线程下查询和更新数据库用到的类

数据库的创建和使用

  • 数据库的文件路径可以是一下三者之一:
  • 一个文件的系统路径,磁盘中可以不存在此文件,因为如果不存在会自动为你创建
  • 一个空的字符串@"",会在临时位置创建一个空的数据库,当FMDatabase连接关闭时,该数据库会被删除
  • NULL,会在内存中穿件一个数据库,当FMDatabase连接关闭时,该数据库会被销毁。

代码示例

- (void)viewDidLoad {
    [super viewDidLoad];
 
 
    //获取沙盒路径的方法一
    //实例化一个FMDatabase对象,并打开一个数据库,如果没有这个数据库,就会创建一个数据库
//    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
//    
//    NSString *documentDirectory = [paths objectAtIndex:0];
//    
//    NSString *dbPath = [documentDirectory stringByAppendingPathComponent:@"Test.db"];
 
    //获取沙盒的路径的方法二
    NSString *dbPath = [NSString stringWithFormat:@"%@/Documents/xiaoming.db", NSHomeDirectory()];
 
    NSLog(@"%@", dbPath);
    //创建库
    FMDatabase *db = [FMDatabase databaseWithPath:dbPath];
 
    //判断如果数据库打开失败,就什么都不做
    if(![db open])
    {
        return;
    }
 
    //创建表
    [db executeUpdate:@"CREATE TABLE Users(Name text, Age integer)"];
 
    //插入数据
    [db executeUpdate:@"INSERT INTO Users(Name, Age)VALUES(?,?)",@"Eric",[NSNumber numberWithInt:25]];
 
    NSString *userName1 = [db stringForQuery:@"SELECT Name FROM Users WHERE Age = ?", @"25"];
 
    NSLog(@"%@", userName1);
 
    //更新数据
    [db executeUpdate:@"UPDATE Users SET Name = ? WHERE Name = ?",@"Michael",@"Eric"];
 
    //删除数据
//    [db executeUpdate:@"DELETE FROM Users WHERE Name = ?", @"Michael"];
 
 
    //查询数据
    NSString *userName = [db stringForQuery:@"SELECT Name FROM Users WHERE Age = ?", @"25"];
 
    NSLog(@"%@", userName);
 
    //查询多个数据,FMResultSet类,是一个结果集,返回多条数据,FMDB会将数据放在这个结果集中,然后在对这个结果集进行查询即可
    FMResultSet *res = [db executeQuery:@"SELECT * FROM Users"];
 
    res = [db executeQuery:@"SELECT * FROM Users WHERE Age = ?", @"25"];
 
    while ([res next]) {
        NSString *name = [res stringForColumn:@"Name"];
        NSString *age = [res stringForColumn:@"Age"];
 
        NSLog(@"%@%@", name, age);
    }
}

输出结果

 

fmdb ios存储模型数组 fmdatabase_数据