众所周知,FMDB是一个非常优秀的第三方库,它是对SQL的封装,方便我们开发。
在 FMDB 中有三个重要的类:
1.FMDatabase:是一个提供 Sqlite 数据库的类,用于执行 SQL 语句。
2.FMResultSet:用在 FMDatabase
中执行查询的结果的类
3.FMDatabaseQueue:在多线程下查询和更新数据库用到的类。
创建数据库:
FMDatabase
是通过一个 SQLite 数据库文件路径创建的,磁盘中可以不存在此文件,因为如果不存在会自动为你创建。
下面我采用单例类实例化一个对象。
单例介绍: http://blog.csdn.net/minjing_lin/article/details/50924336
沙盒路径参考: http://blog.csdn.net/minjing_lin/article/details/50353761
#import "GoodsInfoDB.h"
#import "GoodsData.h"
static GoodsInfoDB * sharedInstance;
@implementation GoodsInfoDB
+(instancetype)sharedInstance
{
if (sharedInstance == nil) {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentDirectory = paths.firstObject;
NSString *dbPath = [documentDirectory stringByAppendingPathComponent:@"XianGuo.db"];
sharedInstance =[self databaseWithPath:dbPath];
[self createGoodsTable];
});
}
if (![sharedInstance open]) {
NSLog(@"Could not open db");
return nil;
}
return sharedInstance;
}
创建表:
+(BOOL)createGoodsTable
{
NSString * CREATE_TABLE =@"CREATE TABLE IF NOT EXISTS Goods(id INTEGER PRIMARY KEY AUTOINCREMENT,goods_id text,goods_name text,buyCount text)";
FMDatabase * db =[self sharedInstance];
BOOL success =[db executeUpdate:CREATE_TABLE];
if (!success) {
NSLog(@"error when creating db CREATE_TABLE");
}
[db close];
return success;
}
插入数据:
NSString * INSERT =@"insert into Goods (goods_id,goods_name,buyCount) values (?,?,?)";
BOOL res = [_db executeUpdate:INSERT,
product.goods_id,
product.goods_name,
count];
删除数据:
1.根据id移除
NSString *DELETE = @"delete from Goods where goods_id = ?";
[_db executeUpdate:DELETE,goodId];
2.删除整个表
[_db executeUpdate:@"delete from Goods"];
更新表:
SQL 语句中除了 SELECT
语句都可以称之为更新操作。包括 CREATE
,UPDATE
,INSERT
,COMMIT
,BEGIN
等。执行更新语句后会返回一个BOOL
值,返回YES
表示执行更新语句成功,返回 NO
表示出现错误。
NSString * UPDATE_GOODSs =@"update Goods set buyCount = ?where goods_id = ?";
[_db executeUpdate:UPDATE_GOODSs,count2,product.goods_id];
查询表:
执行查询操作后,如果成功会返回一个 FMResultSet
对象,反之会返回 nil。
为了遍历查询结果,需要 while()
循环,然后逐条记录查看
关闭数据库:当对数据库进行查询和更新操作完成后,需要调用 -close
关闭数据库 FMDatabase
的连接。
FMDatabase *_db = [self sharedInstance];
FMResultSet *rs = [_db executeQuery:@"select * from Goods"];
NSMutableArray *array = [NSMutableArray array];
while ([rs next])
{
GoodsData * goods =[[GoodsData alloc]init];
goods.goods_id = [rs stringForColumn:@"goods_id"];
goods.goods_name = [rs stringForColumn:@"goods_name"];
goods.buyCount = [rs stringForColumn:@"buyCount"];
[array addObject:goods];
}
[rs close];
[_db close];
每天进步一点点
生活像程序的式样书,我所要做的就是用不同的字符去填满这一页既定的格式