iOS中对数据库FMDB的操作,建议是将方法写成单例,下面是对数据库的一些基本操作
一、在本地数据库中创建表
//获得Documents目录路径
NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)lastObject];
// 文件路径
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"model.sqlite"];
// 实例化FMDataBase对象
_db = [FMDatabasedatabaseWithPath:filePath];
NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)lastObject];
// 文件路径
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"model.sqlite"];
// 实例化FMDataBase对象
_db = [FMDatabasedatabaseWithPath:filePath];
[_dbopen];
FMResultSet *rs = [_dbexecuteQuery:@"select count(*) as 'count' from sqlite_master where type ='table' and name = ?",@"numberData"];
while ([rs next])
{
NSInteger count = [rs intForColumn:@"count"];
NSLog(@"isTableOK %ld", (long)count);
if (0== count){//不存在
break;
}
else{//存在
[_dbclose];
return;
}
}
// 初始化数据表
NSString *personSql = @"CREATE TABLE 'numberData' ('numID' INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL ,'number' VARCHAR(255),'dateStr' VARCHAR(255),'qiNum' VARCHAR(255)) ";
[_dbexecuteUpdate:personSql];
[_dbclose];
二、增
[_dbopen];
NSNumber *maxID = @(0);
FMResultSet *res = [_dbexecuteQuery:@"SELECT * FROM numberData "];
//获取数据库中最大的ID
while ([res next]) {
if ([maxID integerValue] < [[resstringForColumn:@"numID"]integerValue]) {
maxID = @([[resstringForColumn:@"numID"]integerValue]);
}
}
maxID = @([maxIDintegerValue] +1);
[_dbexecuteUpdate:@"INSERT INTO numberData(numID,number,dateStr,qiNum)VALUES(?,?,?,?)",[NSStringstringWithFormat:@"%@",maxID],Num.number,Num.dateStr,Num.qiNum];
[_dbclose];
NSNumber *maxID = @(0);
FMResultSet *res = [_dbexecuteQuery:@"SELECT * FROM numberData "];
//获取数据库中最大的ID
while ([res next]) {
if ([maxID integerValue] < [[resstringForColumn:@"numID"]integerValue]) {
maxID = @([[resstringForColumn:@"numID"]integerValue]);
}
}
maxID = @([maxIDintegerValue] +1);
[_dbexecuteUpdate:@"INSERT INTO numberData(numID,number,dateStr,qiNum)VALUES(?,?,?,?)",[NSStringstringWithFormat:@"%@",maxID],Num.number,Num.dateStr,Num.qiNum];
[_dbclose];
三、删
[_dbopen];
if ([_dbexecuteUpdate:@"DELETE FROM numberData WHERE dateStr = ?",dateStr]) {
[WSProgressHUDshowSuccessWithStatus:@"删除成功!"];
}else{
[WSProgressHUDshowErrorWithStatus:@"删除失败!"];
}
[_dbclose];
if ([_dbexecuteUpdate:@"DELETE FROM numberData WHERE dateStr = ?",dateStr]) {
[WSProgressHUDshowSuccessWithStatus:@"删除成功!"];
}else{
[WSProgressHUDshowErrorWithStatus:@"删除失败!"];
}
[_dbclose];
四、改
[_dbopen];
BOOL su = [_dbexecuteUpdate:@"UPDATE 'numberData' SET number = ? WHERE dateStr = ? and qiNum = ?",newNum,dateStr,qiNum];
[_dbclose];
BOOL su = [_dbexecuteUpdate:@"UPDATE 'numberData' SET number = ? WHERE dateStr = ? and qiNum = ?",newNum,dateStr,qiNum];
[_dbclose];
五、查
[_dbopen];
NSMutableArray *dataArray = [[NSMutableArrayalloc]init];
FMResultSet *res = [_dbexecuteQuery:@"SELECT * FROM numberData"];
while ([res next]) {
Number *num = [[Numberalloc]init];
num.numID= [resstringForColumn:@"numID"];
num.number= [resstringForColumn:@"number"];
num.dateStr= [resstringForColumn:@"dateStr"];
num.qiNum= [resstringForColumn:@"qiNum"];
[dataArray addObject:num];
}
[_dbclose];
NSMutableArray *dataArray = [[NSMutableArrayalloc]init];
FMResultSet *res = [_dbexecuteQuery:@"SELECT * FROM numberData"];
while ([res next]) {
Number *num = [[Numberalloc]init];
num.numID= [resstringForColumn:@"numID"];
num.number= [resstringForColumn:@"number"];
num.dateStr= [resstringForColumn:@"dateStr"];
num.qiNum= [resstringForColumn:@"qiNum"];
[dataArray addObject:num];
}
[_dbclose];
这是个人初步接触FMDB时学的一些语句,后期对这些东西进行了封装,使用更加简单,具体请查看链接:
参考: