导入头文件
import < FMDB.h >
FMDB是讲SQLite API进行了封装的库
优点是以OC方式封装,使用起来更加方便
缺点是只能在iOS开发的时候使用,在跨平台操作上存在局限性
FMDataBase:一个FMDataBase对象就代表一个单独的SQLite数据库,用来执行SQLite语句
在使用数据库的时候,一般我们只需要进行增删改查的操作
这里有4个方法
//打开数据库
+(FMDatabase *)openDB;
//查找数据
+(NSArray *)find;
//插入数据
+(BOOL)insertModel:(Model *)model;
//删除数据
+(BOOL)deleteModel:(Model *)model;
NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *dbPath = [doc stringByAppendingPathComponent:@"user.sqlite"];
FMDatabase *db = [FMDatabase databaseWithPath:dbPath];
在和数据库交互之前,数据库必须是打开的如果权限不足或者资源不足,则无法打开和创建数据库
if ([db open]) {
//创建表
NSString *sqlCreateTable = [NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS '%@' ('%@' TEXT,'%@' TEXT,'%@' TEXT,'%@' TEXT,'%@' TEXT,'%@' TEXT,'%@' TEXT,'%@' TEXT,'%@' TEXT,'%@' TEXT,'%@' TEXT,'%@' TEXT,'%@' TEXT,'%@' TEXT)",MyCollection,Col1,Col2,Col3,Col4,Col5,Col6,Col7,Col8,Col9,Col10,Col11,Col12,Col13,Col14];
BOOL flag = [db executeUpdate:sqlCreateTable];
if (flag) {
NSLog(@"创建表成功");
}
else {
NSLog(@"创建表失败");
}
}
return db;
这里是根据相应格式进行数据库的创建,MyCollection以及Col1等都是作了宏处理的,有多少个属性就做多少个Col1。
+(NSArray *)find
{
NSMutableArray *mArray = [NSMutableArray array];
FMDatabase *db = [self openDB];
if ([db open]) {
NSString *sql = [NSString stringWithFormat:@"SELECT * FROM %@",MyCollection];
//执行查询语句,查询整个表
FMResultSet *rs = [db executeQuery:sql]; //查询的时候才用executeQuery方法,否则用executeUpdate
while ([rs next]) {
Model *model = [[Model alloc]init];
model.comment_num = [NSNumber numberWithInteger:[[rs stringForColumn:Col1] integerValue]];
model.current_price = [NSNumber numberWithInteger:[[rs stringForColumn:Col2] integerValue]];
model.deal_id = [NSNumber numberWithInteger:[[rs stringForColumn:Col3] integerValue]];
model.deal_murl = [rs stringForColumn:Col4];
model.deal_url = [rs stringForColumn:Col5];
model.descriptionNew = [rs stringForColumn:Col6];
model.image = [rs stringForColumn:Col7];
model.market_price = [NSNumber numberWithInteger:[[rs stringForColumn:Col8] integerValue]];
model.min_title = [rs stringForColumn:Col9];
model.promotion_price = [NSNumber numberWithInteger:[[rs stringForColumn:Col10] integerValue]];
model.sale_num = [NSNumber numberWithInteger:[[rs stringForColumn:Col11] integerValue]];
model.score = [NSNumber numberWithInteger:[[rs stringForColumn:Col12] integerValue]];
model.tiny_image = [rs stringForColumn:Col13];
model.title = [rs stringForColumn:Col14];
[mArray addObject:model];
}
}
//关闭数据库
[db close];
return mArray;
}
//插入数据库
+(BOOL)insertModel:(Model *)model
{
BOOL flag = NO;
FMDatabase *db = [self openDB];
if ([db open]) {
NSString *insertSql = [NSString stringWithFormat:@"INSERT INTO '%@' ('%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@') VALUES ('%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@')",MyCollection,Col1,Col2,Col3,Col4,Col5,Col6,Col7,Col8,Col9,Col10,Col11,Col12,Col13,Col14,model.comment_num,model.current_price,model.deal_id,model.deal_murl,model.deal_url,model.descriptionNew,model.image,model.market_price,model.min_title,model.promotion_price,model.sale_num,model.score,model.tiny_image,model.title];
flag = [db executeUpdate:insertSql];
if (flag) {
NSLog(@"数据插入成功");
}
else {
NSLog(@"数据插入失败");
}
}
return flag;
}
+(BOOL)deleteModel:(Model *)model
{
BOOL flag = NO;
FMDatabase *db = [self openDB];
if ([db open]) {
NSString *deleteSql = [NSString stringWithFormat:@"delete from %@ where %@ = %@",MyCollection,Col3,model.deal_id];//delete * from %@ where %@ = %@中的*号为删除表,要是单独删除元素就要去掉
flag = [db executeUpdate:deleteSql];
if (flag) {
NSLog(@"删除成功");
}
else {
NSLog(@"删除失败");
}
}
return flag;
}
需要注意的是,在进行数据库的创建的时候,应为数据库本质是C语言,不支持数组和字典的属性,当出现数组和字典作为属性的时候,需要另外创建数据库