sqlite,FMDB简单使用

2016-05-31  本文已影响42人  karthus
以下代码适用于直接在代码中操作数据库,实际中可以使用navicat图形化界面先进行数据库测试数据的填充,在APP启动时,将.sqlite文件拷贝至沙盒目录下

1.创建数据库
#define DBNAME @"testDB.sqlite"
-(void)creatDataBase
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documents = [paths objectAtIndex:0];
NSString *database_path = [documents stringByAppendingPathComponent:DBNAME];

BOOL isExist = [[NSFileManager defaultManager] fileExistsAtPath:database_path];
if (isExist) {
    return;
}

FMDatabase *db = [FMDatabase databaseWithPath:database_path];
if (![db open]) {
    NSLog(@"打开数据库失败");
  }
}

2.创建表t_test
ID主键,自增整型,向表中添加数据时ID填NULL即可;BLOB存储二进制数据

NSString *sqlCreateTable = @"CREATE TABLE IF NOT EXISTS t_test (ID INTEGER PRIMARY KEY AUTOINCREMENT,title TEXT,thumb BLOB)";
[db executeUpdate:sqlCreateTable];

3.向表中添加数据

//将数组类型转成NSData对应数据库BLOB类型
 NSArray *imgAry = @[@"aa",@"bb",@"cc"];
 NSData *imgData = [NSKeyedArchiver archivedDataWithRootObject:imgAry];

[db executeUpdate:@"INSERT INTO t_test (ID, title,thumb) VALUES (?,?,?)",
 [NSNumber numberWithInt:1],@"xxxxx",
 ];

4.获取数据库中的数据
假设Test类有三个属性对应表中三个字段,dataArray就是获取到的数据库中的数据

FMDatabase *db = [FMDatabase databaseWithPath:database_path];
if (![db open]) {
    NSLog(@"打开数据库失败");
}else{
    FMResultSet *rs = [db executeQuery:@"SELECT * FROM t_test"];
    NSMutableArray *dataArray = [NSMutableArray array];
    while ([rs next]) {
        Test *test = [[Test alloc] init];
        test.id = [rs intForColumn:@"ID"];
        test.title = [rs intForColumn:@"title"];
        test.thumb = [NSKeyedUnarchiver unarchiveObjectWithData:[rs dataForColumn:@"thumb"]];
    [dataArray addObject:test];
    } 
    [rs close];
}
上一篇 下一篇

猜你喜欢

热点阅读