• Stars
    star
    747
  • Rank 60,741 (Top 2 %)
  • Language
    Objective-C
  • License
    Other
  • Created over 9 years ago
  • Updated almost 5 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

FMDB的封装,极大简化你的数据库操作,对于自己的扩展也非常简单

JKDBModel

FMDB的封装,极大简化你的数据库操作,对于自己的扩展也非常简单
封装类的数据库操作思路与多数FMDB封装不同,是直接实体类对象来做增、删、改、查。
代码中有比较详细的注释和讲解,有助于理解runtime的机制,如果能帮到你,麻烦给一个star。 对原作者的框架反射部分做了简化,便于理解,原作者的源码github地址在本文尾部。

为什么要封装这个类呢?

原项目使用的是sqlitepersistentobjects,多线程处理时,问题比较多
多数FMDB框架功能比较多,代码量也比较大,但是很多功能不常用,而且也不便于理解,因此我考虑用简单易于理解的方式
来封装一个适用于公司项目的轻量级小框架。
因为项目需要在多线程下操作数据库,所以demo中的使用案例多数是多线程操作,但是单线程操作也适用。

特点

改进后的特点如下:
1.自动创建数据库、自动创建数据库表。
2.自动检测字段添加新字段。
3.一行代码实现数据库的CURD操作。
4.源码及其简单,易于理解和掌握。
5.扩展自己的功能也非常得简单,容易。
6.支持多线程,非线程阻塞。
7.支持arc和mrc。

how 怎么使用JKDBModel

使用JKDBModel非常的简单,只需要将FMDB和DBModel拖入项目中,然后添加libsqlite3.dylib
然后让你的实体类继承自JKDBModel,你的实体类就具备了操作数据库的功能。

demo中有CURD演示操作

效果图

CURD操作

操作都有保存和批量保存两种方式。
例如
保存操作:[user save]
批量保存:[User saveObjects:array]

数据库操作api

/** 数据库中是否存在表 */
+ (BOOL)isExistInTable;
/** 保存或更新
 * 如果不存在主键,保存,
 * 有主键,则更新
 */
- (BOOL)saveOrUpdate;
/** 保存单个数据 */
- (BOOL)save;
/** 批量保存数据 */
+ (BOOL)saveObjects:(NSArray *)array;
/** 更新单个数据 */
- (BOOL)update;
/** 批量更新数据*/
+ (BOOL)updateObjects:(NSArray *)array;
/** 删除单个数据 */
- (BOOL)deleteObject;
/** 批量删除数据 */
+ (BOOL)deleteObjects:(NSArray *)array;
/** 通过条件删除数据 */
+ (BOOL)deleteObjectsByCriteria:(NSString *)criteria;
/** 清空表 */
+ (BOOL)clearTable;

/** 查询全部数据 */
+ (NSArray *)findAll;

/** 通过主键查询 */
+ (instancetype)findByPK:(int)inPk;

/** 查找某条数据 */
+ (instancetype)findFirstByCriteria:(NSString *)criteria;

/** 通过条件查找数据 
 * 这样可以进行分页查询 @" WHERE pk > 5 limit 10"
 */
+ (NSArray *)findByCriteria:(NSString *)criteria;
/**
 * 创建表
 * 如果已经创建,返回YES
 */
+ (BOOL)createTable;

#pragma mark - must be override method
/** 如果子类中有一些property不需要创建数据库字段,那么这个方法必须在子类中重写 
 */
+ (NSArray *)transients;

更新

修改了创建表和字段检测功能方法。
由于实际项目中,一个账号对应一个文件夹放数据库,经常会有切换账号登录的需求,在initialize创建数据库表,只执行一次,数据库不能保证一定创建,因此添加切换数据库功能,动态创建功能。 2015-08-25
添加条件查询和删除的新方法:

+ (instancetype)findFirstWithFormat:(NSString *)format, ...;

+ (NSArray *)findWithFormat:(NSString *)format, ...;

/** 通过条件删除 (多参数)--2 */
+ (BOOL)deleteObjectsWithFormat:(NSString *)format, ...;

更新于2015-09-08

提醒

SQLite 默认支持五种数据类型TEXT、INTEGER、REAL、BLOB、NULL,我只做了少数类型的判断,
如:int、unsigned int、short、unsigned short、BOOL,对象类型默认是字符串。
当然你可以详细的把所有的类型判断都做出来,代码中有部分常用的表示符号,详细的可以查看apple 文档。
理解代码比会使用代码更重要,望使用的时候先理解一下实现思路。

鸣谢

动态获取Model的属性部分源自:https://github.com/li6185377/LKDaoBase
增删改查封装思想源自:SQLitePersistentObject,与之前做Java时的数据库操作类似,更简易。

如果你有什么问题或者有更好的建议,请告知我,我会及时更正,修改。