SqliteDb 1.1

SqliteDb 1.1

TestsTested
LangLanguage Obj-CObjective C
License MIT
ReleasedLast Release Mar 2018

Maintained by sinsmin.



  • By
  • sinsmin

简单、轻量级的对象持久化库

不支持的属性类型

id类型。

支持的属性类型

NSArray(NSMutableArray)NSDictionary(NSMutableDictionary)NSSet(NSMutableSet)NSOrderedSet(NSMutableOrderedSet)NSMapTableNSHashTableNSData(NSMutableData)NSDateNSURLNSString(NSMutableString)NSValueNSNumber(unsigned)char(unsigned)short(unsigned)int(unsigned)long(unsigned)long longBOOLfloatdoubleCGFloatNSTimeIntervalNSIntegerNSUIntegerCGPointCGVectorCGSizeCGRectCGAffineTransformUIEdgeInsetsUIOffset...
所有被NSNumberNSValue支持的数据类型都可以直接支持。其他无法直接支持的类型(自定义对象除外),可以实现NSCoding协议采用归档方式支持。

线程安全

XCConnectionQueue类内部采用GCD串行队列,将数据库操作包装在一个block中。由于所有方法都是使用sync方式调用,所以不要在block中嵌套调用XCConnectionQueue中的方法,以免出现死锁。

对象持久化

需要持久化的对象实现XCSqliteModel协议中的方法。如果需要持久化集合属性中的元素,必须实现xc_classInArray方法,指定集合中的元素类型。如果不需要,必须实现xc_transientColumns方法,过滤该属性。

使用

简单使用

调用NSObject+XCModelStorage.h中提供的分类方法来操作数据库,只支持单表操作。如果需要更复杂的操作,请使用XCConnectionQueue类提供的方法。
分类中默认使用defaultQueue方法进行数据库操作。如果需要自定义数据库路径,可以先使用defaultQueueWithPath:enableDebugLog:方法初始化默认的共享实例;之后在使用defaultQueue获取默认的共享实例。

XCConnectionQueue

1、close关闭数据库链接
2、executeInQueue:在block使用connection进行数据库操作
3、transactionInQueue:deferredTransactionInQueue:开启事务操作,rollback参数控制是否回滚事务。

XCSqliteConnection

1、executeStatement执行无参数的简单SQL操作。
2、execute:开头的方法支持代占位符参数的SQL操作,防止SQL注入。
3、executeInsert执行插入操作,并返回自增的Id,如果支持;失败返回0。
4、query:开头的方法执行查询操作,并返回查询结果。
5、lastExecuteError方法可以获取最近一次操作数据库的错误;在NSError对象的userinfo参数中,通过XCExecuteSQLKey常量获取执行出错的SQL语句。
在方法中,带有values的参数,参数用?代替;带有parameter的参数,参数用:参数名称代替;带有可变参数的,参数使用?代替。

数据迁移

当有持久化对象的属性与原来的属性不一致时,可以调用对象的分类方法xc_migration来进行数据迁移,这个操作会阻塞当前调用线程直到执行结束。操作完成后,原有的数据不会变动,不需要的列会被删除,新的列会被添加(数据库中默认的值为NULL)。