LKDBHelper

LKDBHelper

this is sqlite ORM (an automatic database operation) 
thread-safe and not afraid of recursive deadlock

QQ群号 113767274 有什么问题或者改进的地方大家一起讨论

推荐个 json 和 model 互转非常好用的工具类 https://github.com/dcty/YYJSON 支持 NSData 直接转换成 model array

Big Upgrade 2.0

Supported NSArray,NSDictionaryModelClassNSNumberNSStringNSDateNSDataUIColor,UIImageCGRectCGPointCGSizeNSRangeint,char,floatdoublelong.. attribute to insert and select automation.

全面支持 NSArray,NSDictionaryModelClassNSNumberNSStringNSDateNSDataUIColor,UIImageCGRectCGPointCGSizeNSRangeint,char,floatdoublelong.. 等属性的自动化操作(插入和查询)


Requirements

Adding to your project

If you are using CocoaPods, then, just add this line to your PodFile

pod 'LKDBHelper', :head

If you are using Encryption, Order can not be wrong

pod 'FMDB/SQLCipher',:head
pod 'LKDBHelper',:head

@property(strong,nonatomic)NSString* encryptionKey;

Basic usage

1 . Create a new Objective-C class for your data model

@interface LKTest : NSObject
@property(copy,nonatomic)NSString* name;
@property NSUInteger  age;
@property BOOL isGirl;

@property(strong,nonatomic)LKTestForeign* address;
@property(strong,nonatomic)NSArray* blah;
@property(strong,nonatomic)NSDictionary* hoho;

@property char like;
...

2 . in the *.m file, overwirte getTableName function (option)

+(NSString *)getTableName
{
    return @"LKTestTable";
}

3 . in the *.m file, overwirte callback function (option)

@interface NSObject(LKDBHelper_Delegate)

+(void)dbDidCreateTable:(LKDBHelper*)helper tableName:(NSString*)tableName;
+(void)dbDidAlterTable:(LKDBHelper*)helper tableName:(NSString*)tableName addColumns:(NSArray*)columns;

+(BOOL)dbWillInsert:(NSObject*)entity;
+(void)dbDidInserted:(NSObject*)entity result:(BOOL)result;

+(BOOL)dbWillUpdate:(NSObject*)entity;
+(void)dbDidUpdated:(NSObject*)entity result:(BOOL)result;

+(BOOL)dbWillDelete:(NSObject*)entity;
+(void)dbDidDeleted:(NSObject*)entity result:(BOOL)result;

///data read finish
+(void)dbDidSeleted:(NSObject*)entity;

@end

4 . Initialize your model with data and insert to database

    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.blah = @[@"1",@"2",@"3"];
    test.blah = @[@"0",@[@1],@{@"2":@2},foreign];
    test.hoho = @{@"array":test.blah,@"foreign":foreign,@"normal":@123456,@"date":[NSDate date]};
    ///warning: NSDate没做处理  所以不能在 NSArray 里 或者 NSDictionry 里面使用NSDate

    //异步 插入第一条 数据   Insert the first
    [test saveToDB];
    //or
    //[globalHelper insertToDB:test];

5 . select 、 delete 、 update 、 isExists 、 rowCount ...

    select:

        NSMutableArray* array = [LKTest searchWithWhere:nil orderBy:nil offset:0 count:100];
        for (id obj in arraySync) {
            addText(@"%@",[obj printAllPropertys]);
        }

    delete:

        [LKTest deleteToDB:test];

    update:

        test.name = "rename";
        [LKTest updateToDB:test where:nil];

    isExists:

        [LKTest isExistsWithModel:test];

    rowCount:

        [LKTest rowCountWithWhere:nil];

6 . Description of parameters "where"

 For example: 
        single:  @"rowid = 1"                         or      @{@"rowid":@1}

        more:    @"rowid = 1 and sex = 0"             or      @{@"rowid":@1,@"sex":@0}

                    when where is "or" type , such as @"rowid = 1 or sex = 0"
                    you only use NSString

        array:   @"rowid in (1,2,3)"                  or      @{@"rowid":@[@1,@2,@3]}

        composite:  @"rowid in (1,2,3) and sex=0 "      or      @{@"rowid":@[@1,@2,@3],@"sex":@0}

        If you want to be judged , only use NSString
        For example: @"date >= '2013-04-01 00:00:00'"

table mapping

overwirte getTableMapping Function (option)

+(NSDictionary *)getTableMapping
{
    //return nil 
    return @{@"name":LKSQLInherit,
             @"MyAge":@"age",
             @"img":LKSQLInherit,
             @"MyDate":@"date",
             @"color":LKSQLInherit,
             @"address":LKSQLUserCalculate};
}

table update (option)

+(void)dbDidAlterTable:(LKDBHelper *)helper tableName:(NSString *)tableName addColumns:(NSArray *)columns
{
    for (int i=0; i<columns.count; i++)
    {
        LKDBProperty* p = [columns objectAtIndex:i];
        if([p.propertyName isEqualToString:@"error"])
        {
            [helper executeDB:^(FMDatabase *db) {
                NSString* sql = [NSString stringWithFormat:@"update %@ set error = name",tableName];
                [db executeUpdate:sql];
            }];
        }
    }
}

set column attribute (option)

+(void)columnAttributeWithProperty:(LKDBProperty *)property
{
    if([property.sqlColumnName isEqualToString:@"MyAge"])
    {
        property.defaultValue = @"15";
    }
    if([property.propertyName isEqualToString:@"date"])
    {
        property.isUnique = YES;
        property.checkValue = @"MyDate > '2000-01-01 00:00:00'";
        property.length = 30;
    }
}

demo screenshot

demo screenshot 
table test data

foreign key data

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值