一直以来对数据库的操作都感觉很麻烦,每次封装FMDB的工具类都是一件让人很头大的事情,在这记录一下它的一些常用操作,很方便实用
首先,是常用的数据库语句
增 INSERT INTO 表名(字段1, 字段2) VALUES(值1, 值2);
删 DELETE FROM 表名 WHERE 字段 = 值
查 SELECT 字段名(*) FROM 表名 WHERE 字段 = 值
改 UPDATE 表名 SET 字段 = 值 WHERE 字段 = 值
然后,创建数据库的名称以及路径
+ (NSString *)getDBPath
{
return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject stringByAppendingPathComponent:@"数据库名称.sqlite"];
}
初始化
+ (void)initialize{
//创建数据库对象
_db = [FMDatabase databaseWithPath:[self getDBPath]];
JKLog(@"%@", [self getDBPath]);
//打开数据库
if (![_db open]) {
JKLog(@"打开失败:%@", _db.lastError);
return;
}
}
查询并创建表和表中的字段
//创建表 注意添加 IF NOT EXISTS 判断是否表已经存在
[_db executeUpdate:@"CREATE TABLE IF NOT EXISTS 表名 (id INTEGER NOT NULL, 字段 字段类型, PRIMARY KEY(id));"];
几种常用的字段类型: TEXT-字符串 INTEGER-数字 blob-Data类型 一般创建的时候都会带一些特定参数,例如时间,日期,版本号等等
查询,是否存在指定的表
//执行查询语句 使用COUNT可以获取满足条件的记录的数量 如果使用COUNT函数,获取时必须使用其别名(AS)来获取 返回YES则存在
FMResultSet *set = [_db executeQuery:@"SELECT COUNT(*) AS 'count' FROM 表名 WHERE 包含的字段 = ?", 字段的值];
if ([set next]) {
return [set intForColumn:@"count"] ? YES : NO;
}
return NO;
删除操作
//执行删除语句
[_db executeUpdateWithFormat:@"DELETE FROM 表名 WHERE 包含的字段 = %@", 字段的值];
下面介绍一种在数据库中存储对象的方法
//模型转换为二进制数据 二进制数据必须保留对象关系 使用归档API
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:需要存储的对象];
[_db executeUpdateWithFormat:@"REPLACE INTO 表名(之前创建好的字段名) VALUES(%@)",data];
这种更新数据库的方式和上面查询是否存在的结合使用,很方便