Skip to content

moacap/LKDBHelper-SQLite-ORM

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

#LKDBHelper this is sqlite ORM (an automatic database operation)
thread-safe and not afraid of recursive deadlock #version 1.0 1, fix a recursive deadlock.
2, rewrite the asynchronous operation -
3, thread-safe
4, various bug modified optimize cache to improve performance

code using FMDatabase , can use the latest FMDatabase: https://github.com/ccgus/fmdb
The entity class automatic operation data #v1.0版本 1、修复了 递归死锁。
2、重写了 异步操作
3、线程安全
4、各种bug 修改,优化缓存,提高性能

低层采用FMDatabase 可自行使用最新的FMDatabase :https://github.com/ccgus/fmdb
根据实体类 自动操作数据

Automatic Reference Counting (ARC)

##example code can download the source code to look at it

  • 需要重载下 你自己的实体类中的 +getTableName 方法 来设置表名 还可以 重载 + getTableVersion 来设置表版本

  • 根据Model自动数据库 操作 不用写 繁琐的SQL语句了

  • 再也不用一个个去找字段 是否写错 格式 是否对应

  • 使用方法跟 LKDaobase 差不多 不过 取消了 继承LKDaobase 的方式 采用了LKDBHelper 统一管理

  • 加入了 表版本管理 比如 当你升级的时候 需要对表 进行升级 可重载

+(LKTableUpdateType)tableUpdateWithDBHelper:(LKDBHelper *)helper oldVersion:(int)oldVersion newVersion:(int)newVersion 方法来 自己写操作 或者用默认的 删除旧表

  • 每种操作 都有异步和同步 两种方式 可自行选择

具体 示例代码可下载源码自行查看


    //清空数据库
    [[LKDBHelper sharedDBHelper] dropAllTable];
    
    //创建表  会根据表的版本号  来判断具体的操作 . create table need to manually call
    [[LKDBHelper sharedDBHelper] createTableWithModelClass:[LKTest class]];
    [[LKDBHelper sharedDBHelper] createTableWithModelClass:[LKTestForeign class]];
    
    //清空表数据   clear table data
    [[LKDBHelper sharedDBHelper] clearTableData:[LKTest class]];
    
    
    LKTestForeign* foreign = [[LKTestForeign alloc]init];
    foreign.address = @":asdasdasdsadasdsdas";
    foreign.postcode  = 123341;
    foreign.addid = 213214;

    //插入数据    insert table row
    LKTest* test = [[LKTest alloc]init];
    test.name = @"zhan san";
    test.age = 16;
    
    //外键 foreign key
    test.address = foreign;
    
    test.isGirl = YES;
    test.like = 'I';
    test.img = [UIImage imageNamed:@"41.png"];
    test.date = [NSDate date];
    test.color = [UIColor orangeColor];
    
    // 插入第一条 数据   Insert the first row
    
    [[LKDBHelper sharedDBHelper] insertToDB:test];
    
    addText(@"同步插入 完成!");
    
    //改个 主键 插入第2条数据   update primary colume value ,  Insert the second
    test.name = @"li si";
    [[LKDBHelper sharedDBHelper] insertToDB:test callback:^(BOOL isInsert) {
        addText(@"异步插入 %@",isInsert>0?@"YES":@"NO");
    }];
    
    //查询   search
    addText(@"同步搜索");
    NSMutableArray* array = [LKTest searchWithWhere:nil orderBy:nil offset:0 count:100];
    for (NSObject* obj in array) {
        addText(@"%@",[obj printAllPropertys]);
    }
    
    addText(@"休息2秒 开始  为了说明 是异步插入的");
    sleep(2);
    addText(@"休息2秒 结束");
    //异步
    [[LKDBHelper sharedDBHelper] search:[LKTest class] where:nil orderBy:nil offset:0 count:100 callback:^(NSMutableArray *array) {
        
        addText(@"异步搜索 结束");
        for (NSObject* obj in array) {
            addText(@"%@",[obj printAllPropertys]);
        }
        sleep(1);
        
        //修改    update
        LKTest* test2 = [array objectAtIndex:0];
        test2.name = @"wang wu";
        [[LKDBHelper sharedDBHelper] updateToDB:test2 where:nil];
        
        addText(@"修改完成 updated ");
        
        array =  [[LKDBHelper sharedDBHelper] search:[LKTest class] where:nil orderBy:nil offset:0 count:100];
        for (NSObject* obj in array) {
            addText(@"%@",[obj printAllPropertys]);
        }
        
        test2.rowid = 0;
        
        BOOL ishas = [[LKDBHelper sharedDBHelper] isExistsModel:test2];
        if(ishas)
        {
            //删除    delete
            [[LKDBHelper sharedDBHelper] deleteToDB:test2];
        }
        
        addText(@"删除完成        deleted");
        sleep(1);
        
        array =  [[LKDBHelper sharedDBHelper] search:[LKTest class] where:nil orderBy:nil offset:0 count:100];
        for (NSObject* obj in array) {
            addText(@"%@",[obj printAllPropertys]);
        }
        
        addText(@"示例 结束  example finished\n\n");
        
        
        
        //Expansion: Delete the picture is no longer stored in the database record
        addText(@"扩展:  删除已不再数据库中保存的 图片记录");
        //目前 已合并到LKDBHelper 中  就先写出来 给大家参考下
        
        [[LKDBHelper sharedDBHelper] clearNoneImage:[LKTest class] columes:[NSArray arrayWithObjects:@"img",nil]];
    }];

About

sqlite 数据库 全自动操作 this is an sqlite ORM(automatic database operation) . use fmdb

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published