fmdb数据库
+(DataBaseHandle*)sharedInstanc
{
static id handle;
static dispatch_once_t once;
dispatch_once(&once,^(){
handle = [[DataBaseHandle alloc]init];
});
return handle;
}
//创建数据库路径
+(NSString*)databaseFilePath
{
NSString * docPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject;
NSString * dbPath = [docPath stringByAppendingString:@"dzm.sqlite"];
NSLog(@"path ==== %@",dbPath);
return dbPath;
}
static FMDatabase * _db = nil;
//创建数据库
+(void)creatDataBase
{
_db = [FMDatabase databaseWithPath:[self databaseFilePath]];
}
//创建表
+(void)creatTable
{
if (!_db) {
[self creatDataBase];
}
//打开数据库,并判断数据库是否打开成功
if (![_db open]) {
NSLog(@"数据库打开失败");
return;
}
//为数据库设置缓存,提高查询效率
[_db setShouldCacheStatements:YES];
//判断数据库中是否已经存在这个表,如果不存在则创建该表
if(![_db tableExists:@"dzm"])
{
BOOL result = [_db executeUpdate:@"CREATE TABLE dzm(user_id TEXT PRIMARY KEY, data BLOB) "];
if (result) {
NSLog(@"创建成功");
}
}
// [_db close];
}
//插入数据
+(void)insertDBWWithArra:(id)dataArray byID:(NSString*)model_id
{
if (!_db) {
[self creatDataBase];
}
if (![_db open]) {
return;
}
[_db setShouldCacheStatements:YES];
if (![_db tableExists:@"dzm"]) {
[self creatTable];
}
//判断将要插入的数据是否存在
// NSString * model_id = [[modelDic allKeys] lastObject];
NSMutableData * data = [NSMutableData data];
NSKeyedArchiver * archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data];
[archiver encodeObject:dataArray forKey:model_id];
[archiver finishEncoding];
FMResultSet * set = [_db executeQuery:@"select data from dzm where user_id = ?",model_id];
if ([set next]) {
BOOL result = [_db executeUpdate:@"update dzm set data = ? where user_id = ?",data,model_id];
if (result) {
NSLog(@"刷新成功");
}
}else{
BOOL result = [_db executeUpdate:@"INSERT INTO dzm (user_id,data) VALUES (?,?)",model_id,data];
NSLog(@"result === %d",result);
}
[_db close];
}
//通过ID获取数据
+(id)getDataArrayWithTitleid:(NSString*)titleID
{
if (!_db) {
[self creatDataBase];
}
if (![_db open]) {
return nil;
}
if (![_db tableExists:@"dzm"]) {
[_db close];
return nil;
}
id array = nil;
FMResultSet * set = [_db executeQuery:@"select data from dzm where user_id = ?",titleID];
if ([set next]) {
NSData * data = [set dataForColumn:@"data"];
NSKeyedUnarchiver * unArchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:data];
array = [unArchiver decodeObjectForKey:titleID];
[unArchiver finishDecoding];
}
[_db close];
return array;
}
//插入数据
+(void)insertDBWWithDictionary:(NSDictionary*)dataDic byID:(NSString*)model_id
{
if (!_db) {
[self creatDataBase];
}
if (![_db open]) {
return;
}
[_db setShouldCacheStatements:YES];
if (![_db tableExists:@"dzm"]) {
[self creatTable];
}
//判断将要插入的数据是否存在
// NSString * model_id = [[modelDic allKeys] lastObject];
NSMutableData * data = [NSMutableData data];
NSKeyedArchiver * archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data];
[archiver encodeObject:dataDic forKey:model_id];
[archiver finishEncoding];
FMResultSet * set = [_db executeQuery:@"select data from dzm where user_id = ?",model_id];
if ([set next]) {
BOOL result = [_db executeUpdate:@"update dzm set data = ? where user_id = ?",data,model_id];
if (result) {
NSLog(@"刷新成功");
}
}else{
BOOL result = [_db executeUpdate:@"INSERT INTO dzm (user_id,data) VALUES (?,?)",model_id,data];
NSLog(@"result === %d 插入成功!",result);
}
[_db close];
}
//通过ID获取数据
+(NSDictionary*)getDataDictionaryWithTitleid:(NSString*)titleID
{
if (!_db) {
[self creatDataBase];
}
if (![_db open]) {
return nil;
}
if (![_db tableExists:@"dzm"]) {
[_db close];
return nil;
}
NSDictionary * dic = nil;
FMResultSet * set = [_db executeQuery:@"select data from dzm where user_id = ?",titleID];
if ([set next]) {
NSData * data = [set dataForColumn:@"data"];
NSKeyedUnarchiver * unArchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:data];
dic = [unArchiver decodeObjectForKey:titleID];
[unArchiver finishDecoding];
}
[_db close];
return dic;
}
//更新数据库
+(void)updateDataBaseWithDictionary:(NSDictionary*)modelDic
{
if (!_db) {
[self creatDataBase];
}
if (![_db open]) {
return;
}
[_db setShouldCacheStatements:YES];
if (![_db tableExists:@"dzm"]) {
[self creatTable];
}
//判断将要插入的数据是否存在
NSString * model_id = [[modelDic allKeys] lastObject];
NSMutableData * data = [NSMutableData data];
NSKeyedArchiver * archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data];
[archiver encodeObject:modelDic forKey:model_id];
[archiver finishEncoding];
FMResultSet * set = [_db executeQuery:@"select * from dzm where user_id = ?",model_id];
if ([set next]) {
[_db executeUpdate:@"update dzm set data = ? where user_id = ?",data,model_id];
}
[_db close];
}
//通过ID删除数据
+(void)deleteDataByTitleID:(NSString*)titleID
{
if (![_db open]) {
return;
}
[_db setShouldCacheStatements:YES];
if (![_db tableExists:@"dzm"]) {
return;
}
[_db executeUpdate:@"delete from dzm where user_id = ?",titleID];
[_db close];
}
//删除所有数据
+(void)deleteAllData
{
if (![_db open]) {
return;
}
[_db setShouldCacheStatements:YES];
if (![_db tableExists:@"dzm"]) {
return;
}
[_db executeUpdate:@"delete from dzm"];
[_db close];
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器