cjc 294d3c4a3a irst | 6 yıl önce | |
---|---|---|
.. | ||
LKDBHelper | 6 yıl önce | |
LICENSE | 6 yıl önce | |
README.md | 6 yıl önce |
this is sqlite ORM (an automatic database operation)
thread-safe and not afraid of recursive deadlock
QQ群号 113767274 有什么问题或者改进的地方大家一起讨论
简书:不定时更新 http://www.jianshu.com/users/376b950a20ec
Supported NSArray,NSDictionary, ModelClass, NSNumber, NSString, NSDate, NSData, UIColor, UIImage, CGRect, CGPoint, CGSize, NSRange, int,char,float, double, long.. attribute to insert and select automation.
全面支持 NSArray,NSDictionary, ModelClass, NSNumber, NSString, NSDate, NSData, UIColor, UIImage, CGRect, CGPoint, CGSize, NSRange, int,char,float, double, long.. 等属性的自动化操作(插入和查询)
If you are using CocoaPods, then, just add this line to your PodFile
pod 'LKDBHelper'
If you are using Encryption, Order can not be wrong
pod 'FMDB/SQLCipher'
pod 'LKDBHelper'
@property(strong,nonatomic)NSString* encryptionKey;
@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;
...
+(NSString *)getTableName
{
return @"LKTestTable";
}
@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
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]};
//同步 插入第一条 数据 Insert the first
[test saveToDB];
//or
//[globalHelper insertToDB:test];
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];
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'"
overwirte getTableMapping Function (option)
+(NSDictionary *)getTableMapping
{
//return nil
return @{@"name":LKSQLInherit,
@"MyAge":@"age",
@"img":LKSQLInherit,
@"MyDate":@"date",
@"color":LKSQLInherit,
@"address":LKSQLUserCalculate};
}
+(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];
}];
}
}
}
+(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;
}
}
table test data
foreign key data
Remember to override the class function getTableName
for model.
Version 1.1 @ 2012-6-20
Version 1.0 @ 2013-5-19
Version 0.0.1 @ 2012-10-1
This code is distributed under the terms and conditions of the MIT license.
Author: Jianghuai Li
Contributors: waiting for you to join