ZYLDataBase 0.2.3

ZYLDataBase 0.2.3

测试已测试
Lang语言 Obj-CObjective C
许可证 MIT
Released最后发布2018年1月

zhangyinglong 维护。



  • 作者:
  • zhangyinglong

--

ZYLDataBase 是一套使用run-time实现ORM机制的sqlite数据库封装接口层。

特性

--

  • 支持数据库加密
  • 使用run-time实现ORM机制
  • 支持数据库版本升级,事务化sql操作

SQLCipher

--

本框架依赖于 SQLCipher ,其编译方式和普通版本的SQLite大致一样,需要注意三点:

  1. 编译参数需定义 SQLITE_HAS_CODECSQLITE_TEMP_STORE=2
  2. 编译过程还需链接 libcrypto,针对 iOS 工程只需要引入Security.framework 即可
  3. 为支持iPhone真机和模拟器,需要各自编译ARMV7x86_64格式,并使用命令 lipo 合并成一整个静态库文件 lipo -create lib1.a lib2.a -output lib3.a

使用方法

--

  1. 需要存储到 sqlite 数据库中的数据结果都需要继承 BaseModel

  2. 数据库初始化

    // 初始化数据库,并自动检测升级
    DatabaseServiece *service = [DatabaseServiece shared];
    
  3. 数据库版本升级(需继承 DatabaseServiece 类)

    // 检测数据库是否有升级,可手动升级
    [service runMigrations];
    

    各个数据表项具体升级操作,在 runMigrations 方法中实现,举个例子:

    旧版本数据结构 User 中定义如下:

     @interface User : BaseModel
    
     @property (nonatomic, assign) uint64_t uid;
     
     @property (nonatomic, copy) NSString *name;    
     
     @end
    

    映射至表 User,各属性分别对应表中的字段

    primaryKey uid name
    1 1000 张三
    2 2000 李四
    3 3000 王麻

    新版本 User 增加一个属性 gender 定义

     @interface User : BaseModel
    
     @property (nonatomic, assign) uint64_t uid;
     
     @property (nonatomic, copy) NSString *name; 
     
     @property (nonatomic, assign) NSInteger gender;   
     
     @end
    

    此时需要对数据库进行升级操作,重写 runMigrations 方法即可:

    - (void)runMigrations {
         @try {
             [self beginTransaction];
             
             // Turn on Foreign Key support
             [self executeSql:@"PRAGMA foreign_keys = ON"];
             
             NSArray *tableNames = [self tableNames];
             if (![tableNames containsObject:@"ApplicationProperties"]) {
                 [self createApplicationPropertiesTable];
             }
             
             if ([self databaseVersion] < 2) {
                 // 升级 User 数据
                 [User updateAll];
                 
                 // 升级 数据库版本
                 [self setDatabaseVersion:2];
             }
             
             [self commit];
         }
         @catch (NSException *exception) {
             // 升级失败回滚事务
             [self rollback];
         }
     }
    
  4. 数据基本操作

    数据库中每一张表对应一个 object class 每一条记录都对应一个 object 实例

    // 增加记录
    User *user = [User new]; // new出来的对象此时未存储至数据库,save之后即存储完毕
    
    // 更新记录
    [user update:@{ @"gender":@(2) }];
    
    // 保存记录
    [user save];
    
    // 删除记录(如果数据库中存在则删除,不存在则不做任何处理)
    [user deleteSelf];
    
    // 修改记录
    [user update:@{ @"gender":@(2) }];
    
    // 存储记录至数据库
    [user save];
    
    // 查找记录
    // sql语句直接搜索
    [User findWithSql:@"select * from User where uid='123'"];
    [User findWithSql:@"select * from User where uid=?" withParameters:[@(123)]];
    [User findWithSqlWithParameters:@"select * from User where uid=?", @"123", nil];
    
    // 条件搜索
    [User findByColumn:@"uid" value:@(100)];
    
    [user resetAll];                                        // 重置查询条件
    user = [user field:@"uid,name"];                        // 设置搜索域
    user = [user whereRaw:@"uid" value:@{@"uid":@(100)}];   // 设置where条件
    user = [user limit:0 size:10];                          // 设置返回记录范围(0-10条记录)
    user = [user order:@"uid"];                             // 设置排序条件
    user = [user group:@"gender"];                          // 设置分组条件
    NSArray *total = [user select];
    
    // 一些常用操作
    [User findAll]; // 查找所有记录
    [User updateAll]; // 数据表升级
    [User deleteAll]; // 清空所有表数据
    
    
  5. 默认开启数据库加密功能

    // 必须在初始化数据库之前设置是否支持加密,默认开启
    [DBServiece secureEntry:NO];
    

安装

--

许可证

--

MIT 许可证

版权所有 © 2017 zhangyinglong

在此特此授予任何人免费获得此软件及相关文档文件(“软件”)副本的权利,无论是用于商业目的还是非商业目的,包括但没有限制于使用、复制、修改、合并、发布、分发、再许可和/或销售副本来处理软件,并允许将软件提供给他人的任何人按以下条件执行此操作

上述版权声明和此许可声明应包含在所有副本或软件的实质性部分中。

软件按“现状”提供,不提供任何形式的保证,无论是明示的、暗示的、具体的还是基于违约的或侵权行为的,包括但不仅限于适用性、特定目的适用性和非侵权性的保证。在任何情况下,作者或版权所有者不对任何索赔、损害或其他责任承担责任,无论是在合同诉讼、侵权诉讼或其他诉讼中,这些索赔、损害或其他责任源于、源于或与软件或其使用或其它方式有关。