以下代码适用于直接在代码中操作数据库,实际中可以使用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];
}
网友评论