基于SQLite3轻量级封装,一行代码实现增删改查
2016-07-19 本文已影响648人
Caiflower
D61084AE-36DE-4516-802E-1E4619B637DF.png
图上所有功能均为一行代码实现,看了这篇文章你也可以~
最近被sql语句弄的死去活来,为了不再写重复的代码,花了几个白天黑夜将常用的功能全部封装了一遍,内部利用runtime获取类的属性列表,使用KVC完成赋值~下面请看提供的接口
/**
* 打开数据库
*
* @return 成功/失败
*/
- (BOOL)openDatabase;
/**
* 根据类名创建表格,默认主键为t_default_id
*
* @param className 类名t_default_id
*/
- (BOOL)creatTableWithClassName:(id)className;
#pragma mark -
#pragma mark - =============== 插入数据 ===============
/**
* 插入数据
* 该方法会将模型对象插入到对象类型所对应的表格中
* @param object 模型对象
*/
- (void)insertDataFromObject:(id)object;
#pragma mark -
#pragma mark - =============== 查询数据 ===============
/**
* 获取表格中所有数据,
*/
- (NSArray *)selecteDataWithClass:(id)className;
/**
* 获取表格中数据行数
*/
- (NSInteger)getTotalRowsFormClass:(id)className;
/**
* 获取表格中第n条数据
*/
- (id)selecteFormClass:(id)className index:(NSInteger)index;
/**
* 单条件查询
*
* @param obj 类名
* @param key 属性名 例 @"name"
* @param opt 符号 例 @"=" > <
* @param value 值 例 @"zhangsan"
*
* @return 查询结果
*/
- (NSArray *)selectObject:(Class)className key:(id)key operate:(NSString *)operate value:(id)value;
/**
* 自定义语句查询
*
* @param sqlString 自定义的sql语句
* @param className 类名
*
* @return 查询结果
*/
- (NSArray *)selecteDataWithSqlString:(NSString *)sqlString class:(id)className;
/**
* 数据库模糊查询(单条件)
*
* @param obj 类
* @param propertyName 属性名也是字段名
* @param type 模糊查询的位置类型
* @param content 查询的字符串
*
* @return 查询内容
*/
- (NSArray *)selectObject:(Class)className propertyName:(NSString *)propertyName type:(GKDatabaseSelectLocation)type content:(NSString *)content;
#pragma mark -
#pragma mark - =============== 更新数据 ===============
/**
* 数据更新
*
* @param obj 类名
* @param oldValues 要更新的内容 例 @【@"name=lisi"】
* @param conditionType 条件类型 例 OR 或者 AND
* @param newValues 更新条件 例 @【@"id=5",@"name=zhangsan"】
*/
- (BOOL) updateObject:(Class)className oldValues:(NSArray *)oldValues conditionType:(QueryType)conditionType newValues:(NSArray *)newValues;
#pragma mark -
#pragma mark - =============== 删除数据 ===============
/**
* 删除数据
*
* @param className 类名
* @param string 删除语句,字符串需要加上单引号 例@"name = 'Chris'" / @"id = 1234" / @"integer > 1234";
*
* @return 删除结果
*/
- (BOOL)deleteObject:(Class)className withString:(NSString *)string;
/**
* 清空数据库某表格的内容
*
* @param className 类名
*
* @return 清空结果
*/
- (BOOL)clearTableWithName:(id)className;
/**
* 删除数据库表格
*
* @param className 类名
*
* @return 删除结果
*/
- (BOOL)deleteTableWithTableName:(id)className;
具体使用
// 打开数据库
[[GKDatabaseManager sharedManager]openDatabase]
/// 创建表格 默认表为为类名,主键为t_default_id
- (IBAction)createTabel:(id)sender {
if ([[GKDatabaseManager sharedManager] creatTableWithClassName:[Person class]]) {
NSLog(@"创建Person表格成功");
};
if ([[GKDatabaseManager sharedManager] creatTableWithClassName:[Student class]]) {
NSLog(@"创建Student表格成功");
};
}
- (IBAction)insertData:(id)sender {
for ( NSInteger i = 0; i < 100; i++) {
Person * p = [[Person alloc]init];
p.name = [NSString stringWithFormat:@"花菜ChrisCai%lu",i];
p.age = arc4random() % 100;
// 向表格中插入数据
[[GKDatabaseManager sharedManager] insertDataFromObject:p];
}
for ( NSInteger i = 0; i < 100; i++) {
Student * s = [[Student alloc]init];
s.name = [NSString stringWithFormat:@"花菜ChrisCai%lu",i];
s.age = 100;
s.score = arc4random() % 100;
s.books = @[s.name,[NSString stringWithFormat:@"%lu",s.age]];
// 向表格中插入数据
[[GKDatabaseManager sharedManager] insertDataFromObject:s];
}
}
/// 查询表内所有数据
- (IBAction)selectAllData:(id)sender {
NSArray * persons = [[GKDatabaseManager sharedManager] selecteDataWithClass:[Person class]];
NSArray * students = [[GKDatabaseManager sharedManager]selecteDataWithClass:[Student class]];
NSLog(@"%@, %@",persons,students);
}
/// 查询表内数据总行数
- (IBAction)selectTotalCount:(id)sender {
NSInteger pCount = [[GKDatabaseManager sharedManager] getTotalRowsFormClass:[Person class]];
NSInteger sCount = [[GKDatabaseManager sharedManager] getTotalRowsFormClass:[Student class]];
NSLog(@"总共有%lu条person记录, 总共有%lu条student记录",pCount,sCount);
}
/// 模糊查找
- (IBAction)vagueSelect:(id)sender {
// 查询Person表格中所有年龄包含8的
NSArray * resultArr = [[GKDatabaseManager sharedManager] selectObject:[Person class] propertyName:@"age" type:GKDatabaseSelectRangOfString content:@"8"];
[resultArr enumerateObjectsUsingBlock:^(Person * obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"%lu",obj.age);
}];
}
/// 更新数据
- (IBAction)updateRows:(id)sender {
// 将表格中年龄为100的,名字全部改为Chris
if ([[GKDatabaseManager sharedManager] updateObject:[Student class] oldValues:@[@"age = 100"] conditionType:QueryTypeAND newValues:@[@"name = Chris"]]) {
NSLog(@"数据更新成功");
}
}
/// 清空表格
- (IBAction)clearTable:(id)sender {
if ([[GKDatabaseManager sharedManager] clearTableWithName:[Person class]]) {
NSLog(@"清空表格成功");
}
}
/// 删除表格
- (IBAction)deleteTabel:(id)sender {
if ([[GKDatabaseManager sharedManager] deleteTableWithTableName:[Person class]]) {
NSLog(@"删除表格成功");
};
}
/// 单条件查询
- (IBAction)singleConditionSearch:(id)sender {
NSArray * resultArr = [[GKDatabaseManager sharedManager] selectObject:[Person class] key:@"age" operate:@">" value:@"50"];
[resultArr enumerateObjectsUsingBlock:^(Person * obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"%lu",obj.age);
}];
}
/// 指定条件删除
- (IBAction)deleteRow:(id)sender {
if ([[GKDatabaseManager sharedManager] deleteObject:[Person class] withString:@"age > 50"]) {
NSLog(@"删除成功");
};
}
源码中给出了详细的注释,如有需要请移步:https://github.com/ChrisCaixx/GKDatabase 如觉得好用,请给上star,如果有不正确的地方欢迎批评指正
有更好的意见请发邮件给我,看见会及时回复,谢谢
邮箱地址:chriscaixx@163.com