使用说明
1关联第三方库
1-1 FMDB
1-2 LKDBHelper
.h文件
#import <Foundation/Foundation.h>
#import "LKDBHelper.h"
@interface SYFMDBManager : NSObject
/// 单例
+ (SYFMDBManager *)shareFMDB;
#pragma mark - 表操作
/// 创建表
- (void)createTable:(Class)modelClass;
/// 删除表
- (void)dropTable:(Class)modelClass;
/// 删除所有表
- (void)dropAllTable;
#pragma mark - 数据操作
/// 保存数据(异步)
- (void)saveDataWithData:(NSObject *)model;
/// 保存数据(区分同步,或异步)
- (void)saveDataWithData:(NSObject *)model synchronously:(BOOL)isSynchronously;
/// 获取所有数据
- (NSArray *)getAllDataWithClass:(Class)modelClass;
/// 删除数据
- (void)deleteDataWithData:(NSObject *)model;
/// 删除所有数据
- (void)deleteAllData;
/// 删除所有数据,删除成功后回调
- (void)deleteAllData:(void (^)(void))completedBlock;
@end.m文件
#import "SYFMDBManager.h"
static NSString *const dataName =@"SYFMDB.db";
@interface SYFMDBManager ()
@property (nonatomic,strong) NSString *dataPath; // 数据库文件目录
@property (nonatomic,strong) LKDBHelper *dataHelper;// 数据库
@end
@implementation SYFMDBManager
#pragma mark - 实例化
- (instancetype)init
{
self = [superinit];
if (self)
{
// NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
// // NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
// NSString *documentDirectory = [paths objectAtIndex:0];
// self.dataPath = [documentDirectory stringByAppendingPathComponent:dataName];
// 区分每个用户数据库
NSString *userId =@"";
NSString *userDBName = [NSStringstringWithFormat:@"%@%@", userId,dataName];
self.dataHelper = [[LKDBHelperalloc] initWithDBName:userDBName];
}
return self;
}
- (void)dealloc
{
self.dataPath =nil;
self.dataHelper =nil;
}
/// 单例
+ (SYFMDBManager *)shareFMDB
{
static SYFMDBManager *sharedManager;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedManager = [[selfalloc] init];
assert(sharedManager !=nil);
});
return sharedManager;
}
#pragma mark - 表操作
// 创建表
- (void)createTable:(Class)modelClass
{
if (modelClass)
{
// BOOL isResult = [self.dataHelper getTableCreatedWithClass:modelClass];
BOOL isResult = [self.dataHelpercreateTableWithModelClass:modelClass];
NSString *resultStr = [NSStringstringWithFormat:@"创建表(%@)%@",NSStringFromClass(modelClass), (isResult ?@"成功" :@"失败")];
NSLog(@"%@", resultStr);
}
}
// 删除表
- (void)dropTable:(Class)modelClass
{
if (modelClass)
{
BOOL isResult = [self.dataHelperdropTableWithClass:modelClass];
NSString *resultStr = [NSStringstringWithFormat:@"删除表(%@)%@",NSStringFromClass(modelClass), (isResult ?@"成功" :@"失败")];
NSLog(@"%@", resultStr);
}
}
// 删除所有表
- (void)dropAllTable
{
[self.dataHelperdropAllTable];
}
#pragma mark - 数据操作
// 保存数据(异步)
- (void)saveDataWithData:(NSObject *)model
{
[self saveDataWithData:modelsynchronously:NO];
}
/// 保存数据(区分同步,或异步)
- (void)saveDataWithData:(NSObject *)model synchronously:(BOOL)isSynchronously
{
if (model)
{
if (isSynchronously)
{
// 同步
// 先删除,后保存
[self deleteDataWithData:model];
BOOL isResult = [self.dataHelperinsertWhenNotExists:model];
NSString *resultStr = [NSStringstringWithFormat:@"同步保存数据%@", (isResult ?@"成功" :@"失败")];
NSLog(@"%@", resultStr);
}
else
{
// 异步
[self.dataHelperinsertToDB:model callback:^(BOOL result) {
BOOL isResult = result >0;
NSString *resultStr = [NSStringstringWithFormat:@"异步保存数据%@", (isResult ?@"成功" :@"失败")];
NSLog(@"%@", resultStr);
}];
}
}
}
// 获取所有数据
- (NSArray *)getAllDataWithClass:(Class)modelClass
{
if (modelClass)
{
NSMutableArray *array = [self.dataHelpersearch:modelClass where:nilorderBy:niloffset:0count:1000];
return array;
}
return nil;
}
// 删除数据
- (void)deleteDataWithData:(NSObject *)model
{
if (model)
{
BOOL isExit = [self.dataHelperisExistsModel:model];
if (isExit)
{
BOOL isResult = [self.dataHelperdeleteToDB:model];
NSString *resultStr = [NSStringstringWithFormat:@"删除数据%@", (isResult ?@"成功" :@"失败")];
NSLog(@"%@", resultStr);
}
else
{
NSLog(@"删除数据失败-数据不存在");
}
}
}
// 删除所有数据
- (void)deleteAllData
{
BOOL isResult = [self.dataHelperdeleteToDB];
NSString *resultStr = [NSStringstringWithFormat:@"删除所有数据%@", (isResult ?@"成功" :@"失败")];
NSLog(@"%@", resultStr);
}
// 删除所有数据,删除成功后回调
- (void)deleteAllData:(void (^)(void))completedBlock
{
BOOL isResult = [self.dataHelperdeleteToDB];
NSString *resultStr = [NSStringstringWithFormat:@"删除所有数据%@", (isResult ?@"成功" :@"失败")];
NSLog(@"%@", resultStr);
if (completedBlock)
{
completedBlock();
}
}
@end

本文介绍如何在iOS应用中实现数据库离线缓存,并提供了FMDB和LKDBHelper两个第三方库的使用说明,包括头文件和实现文件的引入,帮助理解数据缓存操作的封装过程。

2711

被折叠的 条评论
为什么被折叠?



