Coder Social home page Coder Social logo

huangzhibiao / bgfmdb Goto Github PK

View Code? Open in Web Editor NEW
1.4K 38.0 321.0 9.31 MB

BGFMDB让数据的增删改查分别只需要一行代码即可,就是这么简单任性,本库几乎支持存储ios所有基本的自带数据类型.

Objective-C 98.55% Ruby 1.45%
coredata lkdbhelper realm fmdb sqlite jrdb ios

bgfmdb's People

Contributors

carrycn avatar huangzhibiao avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

bgfmdb's Issues

这个好像取不出来 一直报空的错误

//转换从数据库中读取出来的数据.
+(NSArray*)tansformDataFromSqlDataWithTableName:(NSString*)tableName class:(__unsafe_unretained _Nonnull Class)cla array:(NSArray*)array{
NSMutableArray* arrM = [NSMutableArray array];
for(NSDictionary* dict in array){
id object = [BGTool objectFromJsonStringWithTableName:tableName class:cla valueDict:dict];
[arrM addObject:object];
}
return arrM;
}

关于字典转模型,有几个小的建议:

最近在使用这个框架,把解析与存储结合起来,非常人性化,
关于字典转模型,有几个小的建议:

1.增加替换变量的功能,如:

(NSDictionary *)mj_replacedKeyFromPropertyName {
return @{@"addressId":@"id"};
}
2.增加一个字典数组转模型数组功能,如-mj_objectArrayWithKeyValuesArray: (解析时可选存储更好)

crash

11.2 iphoneX crash in BGTool.m 913 line "-[__NSDictionaryM containsString:]: unrecognized selector" when -beginTransformAction:

在使用 uniqueKeys 是否有編譯順序之差

在 stockModel 裡將 bg_uniqueKeys 移除,會無法再新增相同name的資料
但我在people裡使用 bg_uniqueKeys 可防止重復插入相同name資料
再將 bg_uniqueKeys 移除,也可以再新增相同name的資料

以上這些情況都是發生在已經編譯過之後的再次修改。

在使用 uniqueKeys 是否有編譯順序的差別呢?

自动刷新表,alert新字段有问题

我增加了一个属性字段,然后我看到在自动检查有没有新字段时有问题,前面一句select table limit 0,1 的返回结果rs.next 的结果一直是no,然后就没有去检查新字段,然后inset就会报没有新字段的错误。

发现bg_keyPathValues的问题

先看一下二级属性表的结构:
image

现在我匹配到了这个"messageBodyType" : 1
然后,where编出来是这样的:

97eaa19567c8c439b87fe4e5107396f4

多了一个逗号,导致查询失败,问题在于字符串拼接的时候没有考虑该属性位于最后一位,我不懂数据库语言,不清楚是否能直接删除逗号

pod 查询不到

pod search BGFMDB
[!] Unable to find a pod with name, author, summary, or description matching BGFMDB

提个建议

BGProtocol协议建议增加类似黑名单 白名单的接口 固定不解析/解析某些属性

  1. 黑名单里的属性不进行存储操作
  2. 如果设置了白名单的属性 则只存储白名单的属性
    因为对于某些固定忽略属性IgnoreKeys每次存储都需要设置 而对于属性很多 但是只更新少量变量的类 �又需要写很多的IgnoreKeys 或者写麻烦的sql语句

原表数据重新创建表插入数据的问题

还是那个答题类的项目引出的问题:比如50道题,用bg_saveOrUpdateArray方法存储,模型的bg_tableName赋值为@“questionTable”,用户全部答完,答对了40道,错了10道,用户选择交卷以后,进入一个选择结果的界面,该页面有“查看本次对题”,“查看本次错题”的选项,这时如果用户选择查看错题,我需要从原来的表中查询出这10道题,对这10道题再存入一个错题的表中,用于后继的连续性显示的需要,我用的是依然是bg_saveOrUpdateArray这个方法,只不过,这10道题对应的模型的bg_tableName重新赋值为比如叫@“wrongTable”,这时发现wrongTable表创建成功,但是数据无法插入,大概跟了一下,发现是bgdb.m中-(void)bg_saveOrUpdateWithTableName:(NSString* _Nonnull)tablename class:(__unsafe_unretained _Nonnull Class)cla DictArray:(NSArray<NSDictionary*>* _Nonnull)dictArray complete:(bg_complete_B)complete,对于isSave的判断走了([tempDict.allKeys containsObject:bg_id])这个分支,所以最终本来应该是要做的存储操作变成了更新操作,最后wrongTable中始终没有数据。是我没有正确的使用吗?***另外,有没有提供按条件查询属性值的方法,我找了一下,没有找到,比如,我只是单纯地想要查询某一道题题目id为0002的题目对应的答题结果这个属性是答对还是答错,得到一个id类型的值,这时就没有必要查出一条完整的数据。望帮忙指正,谢谢!

建议:关于按条件查询的优化&拓展

1、+(NSArray* _Nullable)bg_find:(NSString* _Nullable)tablename where:(NSString* _Nullable)where;
2、+(NSArray*)tansformDataFromSqlDataWithTableName:(NSString*)tableName class:(__unsafe_unretained _Nonnull Class)cla array:(NSArray*)array;
方法1中调用了方法2,但是方法2中的class取的是[self class];
有的时候我会再封装一层manager来管理逻辑方法调用;
这是就造成了方法2返回来的数组中存放的是封装层的类型,而不是模型类型;
如果方法1中同时暴露tablename与class会更灵活,谢谢!

模型的图片数组存储的bug

模型带一个数组,数组中装的是UIImage,存储报错。然后修改成demo中的UIImage经过UIImageJPEGRepresentation处理后,存储可以了,但是取出后,无法显示,打印是NSConcreteData

关于用cocoapads集成您这个库,只要调用“bg_setDebug,bg_setSqliteName,bg_setDisableCloseDB”方法就报错,不用这几个方法就没问题,各种配置都无效

clang: warning: libstdc++ is deprecated; move to libc++ [-Wdeprecated]
clang: warning: libstdc++ is deprecated; move to libc++ [-Wdeprecated]
Undefined symbols for architecture arm64:
"bg_setDebug(bool)", referenced from:
-[TestViewController viewDidLoad] in TestViewController.o
"bg_setDisableCloseDB(bool)", referenced from:
-[TestViewController viewDidLoad] in TestViewController.o
"bg_setSqliteName(NSString*)", referenced from:
-[TestViewController viewDidLoad] in TestViewController.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

关于嵌套基类模型的问题

有这样一种情况:
我存储的ECMessage模型里面有一个ECMessageBody,这个ECMessageBody是作为基类存在的,也就是说真实的情况会是继承自ECMessageBody的ECTextMessageBody,ECVideoMessageBody等等,在存储的时候,存成了ECMessageBody造成了数据的丢失和无法还原.
这个问题该怎么解决呢?

+(id)getSqlValue:(id)value type:(NSString*)type encode:(BOOL)encode

if(encode){
return [self jsonStringWithArray:@[value]];
}else{
return [self arrayFromJsonString:value].firstObject; //这里[self arrayFromJsonString:value]返回的不一定是NSArray类型
}

最新版本,BGTool里的这个方法的最后自定义类型的处理貌似不对吧,更新完库以后会导致崩溃

模型属性是可变数组更新的问题

有这样的需求,有一个TestModel,带有10个属性,其中,有一个属性是可变数组,初始化时,可变数组是空数组或者有一个自定义的SubTestModel或者UIImage,但是当用户操作以后,可变数组中需要增加或者删除数个SubTestModel或者UIImage,用bg_update:bg_tablename where:where方法,会数据库报错:near "XXX": syntax error,看了作者的所有方法,没有找到明确的提示,还请作者有时间帮忙看看,因为这种可变数组更新对于那种可选择图片然后离线保存,下一次在提交后台前又可以操作之前离线保存的数据的应用还是很常见的操作。另外,作者辛苦了,佩服作者的开源精神和奉献精神。给你加星了,汗颜我这个拿来主义狗第一次给开源作者加星。

下载下来的Demo字典转模型的时候点击开始转换直接崩溃

在体验Demo的时候,点击开始转换程序直接崩溃,是正常现象吗?下面是打印的崩溃日志:
2018-03-12 21:38:09.977557+0800 BGFMDB[73614:3660519] 调试输出: insert into My(BG_sex,BG_foods,BG_dog,BG_intro,BG_bg_updateTime,BG_bg_createTime,BG_body,BG_name,BG_dogs,BG_bodys) values(?,?,?,?,?,?,?,?,?,?);
2018-03-12 21:38:09.981172+0800 BGFMDB[73614:3660519] 调试输出: select * from My
2018-03-12 21:38:09.983643+0800 BGFMDB[73614:3660519] -[__NSDictionaryM containsString:]: unrecognized selector sent to instance 0x600000234140
2018-03-12 21:38:09.990227+0800 BGFMDB[73614:3660519] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSDictionaryM containsString:]: unrecognized selector sent to instance 0x600000234140'

嗯哼

pod 'BGFMDB', '~> 2.0.2' 在哪呢?

s.name = "BGFMDB"
s.version = "2.0.1"
s.summary = "完美支持iOS大部分类型数据的存储,同时带有 字典转模型 功能模块."

如果你能写一个使用BGFMDB的demo的话,就更好了。

你的这个BGFMDB像你说的很好用,但是网上一搜索,发现使用你的框架写的demo却一个都没有,即时一个懂FMDB的人,想用您的框架。还要重新学习,比较花费时间。我就是提个建议!望采纳!!!!

你好,请问我数据库有一个字段是唯一约束,然后在启动配置的时候更新需要根据唯一约束来,然后在其他地方更新其他数据,要根据其他两个约束来,

你好,我的数据库有@“stockId” @"prefix",@"code" 以及其他等字段,开始保存或者更新数据库的时候,根据是否有stockId来判断是否更新或保存,然后进入服务器数据刷新的时候,因为服务器没有返回stockId,只有@"prefix",@"code"和其它数据,所以我就只需要再根据@"prefix",@"code"来进行数据库保存,单个获取保存可以,但是速度慢,我想批量保存数据

比如 //实现该函数,返回指定的 “唯一约束” stockId.
+(NSArray *)bg_uniqueKeys{
return @[@"stockId"];
}

联合主键
+(NSArray *)bg_unionPrimaryKeys{
return @[@"prefix",@"code"];
}

在有联合主键和唯一约束的时候,更新数据里面有唯一约束的时候,更新所有其他数据,没有唯一约束 而更新的时候,希望通过联合主键,忽略唯一约束进行更新 ,怎么批量更新呢?

然后批量根据bg_unionPrimaryKeys更新的时候,出现错误

FMDatabase.m :1177 Unknown error finalizing or resetting statement (19: UNIQUE constraint failed: StockInfoModel.BG_stockId)
报错,请问怎么处理?具体怎么用呢?谢谢

关于模拟监听股票数据变化的

问一下,如果再uitableview里面放很多股票,监视股票数据变化,该如何改写呢?定时刷新需要和服务器交互,然后插入数据库再按价格或者其他照规排列,如何动态监听呢?而且频繁插入和读取会卡。怎么优化呢?谢谢

可否将数据库放入Library里?

放在Documents里大部分情况下不会出问题,但如果开发者需要开启app的共享文件夹功能,那么苹果要求Documents里的文件只能是“用户自主下载、导入、创建”的文件,有其他非用户主动产生的文件会被拒审。
以前就遇到过这种情况,百度地图就是把缓存文件方Documents里,导致app新版本开启共享文件夹功能后被拒审,最后得换高德地图,高德地图的缓存文件是放Library里的。

死锁问题

在xCode9环境下 存储或批量存储对象会导致死锁

按时间删除不能成功

[OTWaitOrderModel bg_deleteFormatSqlConditions:@"where %@ like %@",bg_sqlKey(bg_createTimeKey),@"2017-09-27 19:57:38"];

分页查询?

是否提供个分页查询接口,比如 page = 1, count = 10

多线程事务操作

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
NSLog(@"存储...");
bg_inTransaction(^BOOL{
return [p bg_save];
});
});

这样会出现
The FMDatabase <FMDatabase: 0x6000000a3c60> is currently in use.

插入100条数据有点慢

目前 我有100条model数据 for循环插入要2秒左右的时间 这个太久了 有什么一下子插入100条的数据吗

for (YLHomeCardModel *model in reversedArray) {

            model.updateTime = [Utility currentTimeInterval];
            
            [model bg_saveOrUpdate];
            
            NSLog(@"update name %@ date %@",model.title,model.updateTime);
        }

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.