欢迎你们follow,star与forkgit
若是您已找到了Paintinglite安全漏洞和须要修改的漏洞,则应尽快经过电子邮件将其发送至863713745@qq.com。感谢您的支持。github
直接经过GitHub下载到本地,将Paintinglite拖到项目中,便可体验Paintinglite。(须要在项目中添加Sqlite3支持的libsqlite3.tbd或libsqlite3.0.tbd)objective-c
Paintinglite版本更新 | |
---|---|
v1.1版本更新概要 | 相对比v1.0优化打开数据库操做和增长了查看数据库文件存在,大小等重要信息 |
v1.2版本更新概要 | 从新修订了压力测试策略,极大程度上缩减框架大小(<10MB),增长一级缓存和日志写入策略 |
Paintinglite是一款优秀,快速的Sqlite3数据库框架,Paintinglite对数据具备良好的封装性,快速的插入数据特色,对于庞大的数据量仍可以表现出良好的资源利用率。 Paintinglite支持对象映射,对sqlite3进行了很是轻量级的对象封装,它将POJO与数据库表创建映射关系,Paintinglite既可以自动生成SQL语句,又能够手动写入SQL语句,实现开发便捷和高效查询于一体的轻量级框架。sql
Paintinglite功能表 | |
---|---|
库基本操做 | |
表基本操做 | |
封装查询操做 | |
PQL特性语言查询操做 | |
高级数据库配置操做 | |
智能查询操做(多封装查询) | |
聚合查询操做 | |
级联操做 | |
事务操做 | |
安全加密操做 | |
拆分大型表操做 | |
日志记录操做 | |
快照保存操做 | |
备份数据库操做(支持MySQL,SQLServer,Sqlite3,Oracle) | |
压力测试操做(支持生成报告) |
- (Boolean)openSqlite:(NSString *)fileName;
- (Boolean)openSqlite:(NSString *)fileName completeHandler:(void(^ __nullable)(NSString *filePath,PaintingliteSessionError *error,Boolean success))completeHandler;
复制代码
Paintinglite具备良好的处理机制,经过传入数据库名称进行建立数据库,即便数据库后缀不规范,它仍能建立出.db后缀的数据库。数据库
[self.sessionM openSqlite:@"sqlite"];
[self.sessionM openSqlite:@"sqlite02.db"];
[self.sessionM openSqlite:@"sqlite03.image"];
[self.sessionM openSqlite:@"sqlite04.text"];
[self.sessionM openSqlite:@"sqlite05.."];
复制代码
得到建立数据库的绝对路径。数组
[self.sessionM openSqlite:@"sqlite" completeHandler:^(NSString * _Nonnull filePath, PaintingliteSessionError * _Nonnull error, Boolean success) {
if (success) {
NSLog(@"%@",filePath);
}
}];
复制代码
- (Boolean)releaseSqlite;
- (Boolean)releaseSqliteCompleteHandler:(void(^)(PaintingliteSessionError *error,Boolean success))completeHandler;
复制代码
- (Boolean)execTableOptForSQL:(NSString *)sql;
- (Boolean)execTableOptForSQL:(NSString *)sql completeHandler:(void(^ __nullable)(PaintingliteSessionError *error,Boolean success))completeHandler;
- (Boolean)createTableForName:(NSString *)tableName content:(NSString *)content;
- (Boolean)createTableForName:(NSString *)tableName content:(NSString *)content completeHandler:(void(^ __nullable)(PaintingliteSessionError *error,Boolean success))completeHandler;
- (Boolean)createTableForObj:(id)obj createStyle:(PaintingliteDataBaseOptionsCreateStyle)createStyle;
- (Boolean)createTableForObj:(id)obj createStyle:(PaintingliteDataBaseOptionsCreateStyle)createStyle completeHandler:(void(^ __nullable)(PaintingliteSessionError *error,Boolean success))completeHandler;
复制代码
建立表的三种方式:缓存
[self.sessionM execTableOptForSQL:@"CREATE TABLE IF NOT EXISTS cart(UUID VARCHAR(20) NOT NULL PRIMARY KEY,shoppingName TEXT,shoppingID INT(11))" completeHandler:^(PaintingliteSessionError * _Nonnull error, Boolean success) {
if (success) {
NSLog(@"===CREATE TABLE SUCCESS===");
}
}];
复制代码
[self.sessionM createTableForName:@"student" content:@"name TEXT,age INTEGER"];
复制代码
User *user = [[User alloc] init];
[self.sessionM createTableForObj:user createStyle:PaintingliteDataBaseOptionsUUID];
复制代码
对象建立能够自动生成主键:安全
主键 | 类型 |
---|---|
UUID | 字符串 |
ID | 数值 |
- (Boolean)execTableOptForSQL:(NSString *)sql;
- (Boolean)execTableOptForSQL:(NSString *)sql completeHandler:(void(^ __nullable)(PaintingliteSessionError *error,Boolean success))completeHandler;
- (BOOL)alterTableForName:(NSString *__nonnull)oldName newName:(NSString *__nonnull)newName;
- (BOOL)alterTableForName:(NSString *__nonnull)oldName newName:(NSString *__nonnull)newName completeHandler:(void(^ __nullable)(PaintingliteSessionError *error,Boolean success))completeHandler;
- (BOOL)alterTableAddColumnWithTableName:(NSString *)tableName columnName:(NSString *__nonnull)columnName columnType:(NSString *__nonnull)columnType;
- (BOOL)alterTableAddColumnWithTableName:(NSString *)tableName columnName:(NSString *__nonnull)columnName columnType:(NSString *__nonnull)columnType completeHandler:(void(^ __nullable)(PaintingliteSessionError *error,Boolean success))completeHandler;
- (BOOL)alterTableForObj:(id)obj;
- (BOOL)alterTableForObj:(id)obj completeHandler:(void(^ __nullable)(PaintingliteSessionError *error,Boolean success))completeHandler;
复制代码
更新表三种方式:session
SQL更新框架
表名更新 [ 表名称 | 表字段 ]
[self.sessionM alterTableForName:@"cart" newName:@"carts"];
[self.sessionM alterTableAddColumnWithTableName:@"carts" columnName:@"newColumn" columnType:@"TEXT"];
复制代码
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface User : NSObject
@property (nonatomic,strong)NSString *name;
@property (nonatomic,strong)NSNumber *age;
@property (nonatomic,strong)NSMutableArray<id> *mutableArray;
@end
NS_ASSUME_NONNULL_END
复制代码
根据表和对象的映射关系,自动根据对象更新表字段。
User *user = [[User alloc] init];
[self.sessionM alterTableForObj:user];
复制代码
- (Boolean)execTableOptForSQL:(NSString *)sql;
- (Boolean)execTableOptForSQL:(NSString *)sql completeHandler:(void(^ __nullable)(PaintingliteSessionError *error,Boolean success))completeHandler;
- (Boolean)dropTableForTableName:(NSString *)tableName;
- (Boolean)dropTableForTableName:(NSString *)tableName completeHandler:(void(^)(PaintingliteSessionError *error,Boolean success))completeHandler;
- (Boolean)dropTableForObj:(id)obj;
- (Boolean)dropTableForObj:(id)obj completeHandler:(void(^)(PaintingliteSessionError *error,Boolean success))completeHandler;
复制代码
删除表的三种方法:
[self.sessionM execTableOptForSQL:@"DROP TABLE carts" completeHandler:^(PaintingliteSessionError * _Nonnull error, Boolean success) {
if (success) {
NSLog(@"===DROP TABLE SUCCESS===");
}
}];
复制代码
User *user = [[User alloc] init];
[self.sessionM dropTableForObj:user];
复制代码
查询能够提供查询结果用数组封装或者采用对象直接封装的特色。
- (NSMutableArray *)execQuerySQL:(NSString *__nonnull)sql;
- (Boolean)execQuerySQL:(NSString *__nonnull)sql completeHandler:(void(^ __nullable)(PaintingliteSessionError *error,Boolean success,NSMutableArray<NSDictionary *> *resArray))completeHandler;
复制代码
[self.sessionM execQuerySQL:@"SELECT * FROM student" completeHandler:^(PaintingliteSessionError * _Nonnull error, Boolean success, NSMutableArray<NSDictionary *> * _Nonnull resArray) {
if (success) {
for (NSDictionary *dict in resArray) {
NSLog(@"%@",dict);
}
}
}];
复制代码
2020-06-27 15:35:45.967569+0800 Paintinglite[5805:295051] { age = 21; name = CreaterOS; } 2020-06-27 15:35:45.967760+0800 Paintinglite[5805:295051] { age = 19; name = Painting; } 2020-06-27 15:35:45.967879+0800 Paintinglite[5805:295051] { age = 21; name = CreaterOS; }
封装查询
封装查询能够将查询结果封装到与表字段相对应的对象中。
- (id)execQuerySQL:(NSString *__nonnull)sql obj:(id)obj;
- (Boolean)execQuerySQL:(NSString *__nonnull)sql obj:(id)obj completeHandler:(void(^ __nullable)(PaintingliteSessionError *error,Boolean success,NSMutableArray *resArray,NSMutableArray<id> *resObjList))completeHandler;
复制代码
Student *stu = [[Student alloc] init];
[self.sessionM execQuerySQL:@"SELECT * FROM student" obj:stu completeHandler:^(PaintingliteSessionError * _Nonnull error, Boolean success, NSMutableArray<NSDictionary *> * _Nonnull resArray, NSMutableArray<id> * _Nonnull resObjList) {
if (success) {
for (Student *stu in resObjList) {
NSLog(@"stu.name = %@ and stu.age = %@",stu.name,stu.age);
}
}
}];
复制代码
2020-06-27 15:39:27.306786+0800 Paintinglite[5892:302879] stu.name = CreaterOS and stu.age = 21 2020-06-27 15:39:27.306961+0800 Paintinglite[5892:302879] stu.name = Painting and stu.age = 19 2020-06-27 15:39:27.307110+0800 Paintinglite[5892:302879] stu.name = CreaterOS and stu.age = 21
条件查询语法规则:
- 下标从0开始
- 条件参数使用?做占位符
SELECT * FROM user WHERE name = ? and age = ?
复制代码
- (NSMutableArray<NSDictionary *> *)execPrepareStatementSql;
- (Boolean)execPrepareStatementSqlCompleteHandler:(void(^ __nullable)(PaintingliteSessionError *error,Boolean success,NSMutableArray *resArray))completeHandler;
复制代码
[self.sessionM execQuerySQLPrepareStatementSql:@"SELECT * FROM student WHERE name = ?"];
[self.sessionM setPrepareStatementPQLParameter:0 paramter:@"CreaterOS"];
NSLog(@"%@",[self.sessionM execPrepareStatementSql]);
复制代码
2020-06-27 15:44:06.664951+0800 Paintinglite[5984:310580] ( { age = 21; name = CreaterOS; }, { age = 21; name = CreaterOS; } )
- (NSMutableArray<NSDictionary *> *)execLikeQuerySQLWithTableName:(NSString *__nonnull)tableName field:(NSString *__nonnull)field like:(NSString *__nonnull)like;
- (Boolean)execLikeQuerySQLWithTableName:(NSString *__nonnull)tableName field:(NSString *__nonnull)field like:(NSString *__nonnull)like completeHandler:(void(^)(PaintingliteSessionError *error,Boolean success,NSMutableArray *resArray))completeHandler;
- (id)execLikeQuerySQLWithField:(NSString *__nonnull)field like:(NSString *__nonnull)like obj:(id)obj;
- (Boolean)execLikeQuerySQLWithField:(NSString *__nonnull)field like:(NSString *__nonnull)like obj:(id)obj completeHandler:(void(^)(PaintingliteSessionError *error,Boolean success,NSMutableArray *resArray,NSMutableArray<id>* resObjList))completeHandler;
复制代码
[self.sessionM execLikeQuerySQLWithTableName:@"student" field:@"name" like:@"%t%" completeHandler:^(PaintingliteSessionError * _Nonnull error, Boolean success, NSMutableArray<NSDictionary *> * _Nonnull resArray) {
if (success) {
for (NSDictionary *dict in resArray) {
NSLog(@"%@",dict);
}
}
}];
Student *stu = [[Student alloc] init];
[self.sessionM execLikeQuerySQLWithField:@"name" like:@"%t%" obj:stu completeHandler:^(PaintingliteSessionError * _Nonnull error, Boolean success, NSMutableArray<NSDictionary *> * _Nonnull resArray, NSMutableArray<id> * _Nonnull resObjList) {
if (success) {
for (NSDictionary *dict in resArray) {
NSLog(@"%@",dict);
}
}
}];
复制代码
2020-06-27 15:46:31.310495+0800 Paintinglite[6030:314851] { age = 21; name = CreaterOS; } 2020-06-27 15:46:31.310701+0800 Paintinglite[6030:314851] { age = 19; name = Painting; } 2020-06-27 15:46:31.310868+0800 Paintinglite[6030:314851] { age = 21; name = CreaterOS; }
- (NSMutableArray<NSDictionary *> *)execLimitQuerySQLWithTableName:(NSString *__nonnull)tableName limitStart:(NSUInteger)start limitEnd:(NSUInteger)end;
- (Boolean)execLimitQuerySQLWithTableName:(NSString *__nonnull)tableName limitStart:(NSUInteger)start limitEnd:(NSUInteger)end completeHandler:(void(^)(PaintingliteSessionError *error,Boolean success,NSMutableArray *resArray))completeHandler;
- (id)execLimitQuerySQLWithLimitStart:(NSUInteger)start limitEnd:(NSUInteger)end obj:(id)obj;
- (Boolean)execLimitQuerySQLWithLimitStart:(NSUInteger)start limitEnd:(NSUInteger)end obj:(id)obj completeHandler:(void(^)(PaintingliteSessionError *error,Boolean success,NSMutableArray *resArray,NSMutableArray<id>* resObjList))completeHandler;
复制代码
[self.sessionM execLimitQuerySQLWithTableName:@"student" limitStart:0 limitEnd:1 completeHandler:^(PaintingliteSessionError * _Nonnull error, Boolean success, NSMutableArray<NSDictionary *> * _Nonnull resArray) {
if (success) {
for (NSDictionary *dict in resArray) {
NSLog(@"%@",dict);
}
}
}];
Student *stu = [[Student alloc] init];
[self.sessionM execLimitQuerySQLWithLimitStart:0 limitEnd:1 obj:stu completeHandler:^(PaintingliteSessionError * _Nonnull error, Boolean success, NSMutableArray<NSDictionary *> * _Nonnull resArray, NSMutableArray<id> * _Nonnull resObjList) {
if (success) {
for (Student *stu in resObjList) {
NSLog(@"stu.name = %@ and stu.age = %@",stu.name,stu.age);
}
}
}];
复制代码
2020-06-27 15:51:13.026776+0800 Paintinglite[6117:323796] stu.name = CreaterOS and stu.age = 21
- (NSMutableArray<NSDictionary *> *)execOrderByQuerySQLWithTableName:(NSString *__nonnull)tableName orderbyContext:(NSString *__nonnull)orderbyContext orderStyle:(PaintingliteOrderByStyle)orderStyle;
- (Boolean)execOrderByQuerySQLWithTableName:(NSString *__nonnull)tableName orderbyContext:(NSString *__nonnull)orderbyContext orderStyle:(PaintingliteOrderByStyle)orderStyle completeHandler:(void(^)(PaintingliteSessionError *error,Boolean success,NSMutableArray *resArray))completeHandler;
- (id)execOrderByQuerySQLWithOrderbyContext:(NSString *__nonnull)orderbyContext orderStyle:(PaintingliteOrderByStyle)orderStyle obj:(id)obj;
- (Boolean)execOrderByQuerySQLWithOrderbyContext:(NSString *__nonnull)orderbyContext orderStyle:(PaintingliteOrderByStyle)orderStyle obj:(id)obj completeHandler:(void(^)(PaintingliteSessionError *error,Boolean success,NSMutableArray *resArray,NSMutableArray<id>* resObjList))completeHandler;
复制代码
Student *student = [[Student alloc] init];
[self.sessionM execOrderByQuerySQLWithOrderbyContext:@"name" orderStyle:PaintingliteOrderByDESC obj:student completeHandler:^(PaintingliteSessionError * _Nonnull error, Boolean success, NSMutableArray<NSDictionary *> * _Nonnull resArray, NSMutableArray<id> * _Nonnull resObjList) {
if (success) {
for (Student *stu in resObjList) {
NSLog(@"stu.name = %@ and stu.age = %@",stu.name,stu.age);
}
}
}];
复制代码
2020-06-27 15:55:06.714604+0800 Paintinglite[6196:331097] stu.name = Painting and stu.age = 19 2020-06-27 15:55:06.714801+0800 Paintinglite[6196:331097] stu.name = CreaterOS and stu.age = 21 2020-06-27 15:55:06.714962+0800 Paintinglite[6196:331097] stu.name = CreaterOS and stu.age = 21
- (Boolean)insert:(NSString *__nonnull)sql;
- (Boolean)insert:(NSString *__nonnull)sql completeHandler:(void(^ __nullable)(PaintingliteSessionError *error,Boolean success))completeHandler;
- (Boolean)insertWithObj:(id)obj completeHandler:(void(^ __nullable)(PaintingliteSessionError *error,Boolean success))completeHandler;
复制代码
[self.sessionM insert:@"INSERT INTO student(name,age) VALUES('CreaterOS',21),('Painting',19)"];
复制代码
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface Student : NSObject
@property (nonatomic,strong)NSString *name;
@property (nonatomic,strong)NSNumber *age;
@end
NS_ASSUME_NONNULL_END
复制代码
Student *stu = [[Student alloc] init];
stu.name = @"ReynBryant";
stu.age = [NSNumber numberWithInteger:21];
[self.sessionM insertWithObj:stu completeHandler:nil];
复制代码
对于庞大数据量,Paintinglit仍可以表现出良好的效率,经过一次性读入1千6百万条数据只耗时6ms-7ms。
- (Boolean)update:(NSString *__nonnull)sql;
- (Boolean)update:(NSString *__nonnull)sql completeHandler:(void(^)(PaintingliteSessionError *error,Boolean success))completeHandler;
- (Boolean)updateWithObj:(id)obj condition:(NSString *__nonnull)condition completeHandler:(void(^)(PaintingliteSessionError *error,Boolean success))completeHandler;
复制代码
[self.sessionM update:@"UPDATE student SET name = 'Painting' WHERE name = 'ReynBryant'"];
复制代码
对象更新
Student *stu = [[Student alloc] init];
stu.name = @"CreaterOS";
[self.sessionM updateWithObj:stu condition:@"age = 21" completeHandler:nil];
复制代码
增长更新操做,能够经过对象传值方式进行更新 例如: User *user = [[User alloc] init]; user.name = @"CreaterOS"; user.age = 21;
- (Boolean)del:(NSString *__nonnull)sql;
- (Boolean)del:(NSString *__nonnull)sql completeHandler:(void(^)(PaintingliteSessionError *error,Boolean success))completeHandler;
复制代码
经过PQL语句,Paintinglite能够自动帮您完成SQL语句的书写。
PQL语法规则(大写 | 类名必定要和表关联) FROM + 类名称 + [条件]
- (id)execPrepareStatementPQL;
- (Boolean)execPrepareStatementPQLWithCompleteHandler:(void(^)(PaintingliteSessionError *error,Boolean success,NSMutableArray *resArray,NSMutableArray<id>* resObjList))completeHandler;
- (void)execQueryPQLPrepareStatementPQL:(NSString *__nonnull)prepareStatementPQL;
- (void)setPrepareStatementPQLParameter:(NSUInteger)index paramter:(NSString *__nonnull)paramter;
- (void)setPrepareStatementPQLParameter:(NSArray *__nonnull)paramter;
- (id)execPQL:(NSString *__nonnull)pql;
- (Boolean)execPQL:(NSString *__nonnull)pql completeHandler:(void(^)(PaintingliteSessionError *error,Boolean success,NSMutableArray *resArray,NSMutableArray<id>* resObjList))completeHandler;
复制代码
[self.sessionM execPQL:@"FROM Student WHERE name = 'CreaterOS'" completeHandler:^(PaintingliteSessionError * _Nonnull error, Boolean success, NSMutableArray * _Nonnull resArray, NSMutableArray<id> * _Nonnull resObjList) {
if (success) {
for (Student *stu in resObjList) {
NSLog(@"stu.name = %@ and stu.age = %@",stu.name,stu.age);
}
}
}];
复制代码
2020-06-27 16:16:47.145774+0800 Paintinglite[6753:369828] stu.name = CreaterOS and stu.age = 21 2020-06-27 16:16:47.145928+0800 Paintinglite[6753:369828] stu.name = CreaterOS and stu.age = 21
[self.sessionM execPQL:@"FROM Student LIMIT 0,1" completeHandler:^(PaintingliteSessionError * _Nonnull error, Boolean success, NSMutableArray * _Nonnull resArray, NSMutableArray<id> * _Nonnull resObjList) {
if (success) {
for (Student *stu in resObjList) {
NSLog(@"stu.name = %@ and stu.age = %@",stu.name,stu.age);
}
}
}];
复制代码
[self.sessionM execPQL:@"FROM Student WHERE name LIKE '%t%'" completeHandler:^(PaintingliteSessionError * _Nonnull error, Boolean success, NSMutableArray * _Nonnull resArray, NSMutableArray<id> * _Nonnull resObjList) {
if (success) {
for (Student *stu in resObjList) {
NSLog(@"stu.name = %@ and stu.age = %@",stu.name,stu.age);
}
}
}];
复制代码
[self.sessionM execPQL:@"FROM Student ORDER BY name ASC" completeHandler:^(PaintingliteSessionError * _Nonnull error, Boolean success, NSMutableArray * _Nonnull resArray, NSMutableArray<id> * _Nonnull resObjList) {
if (success) {
for (Student *stu in resObjList) {
NSLog(@"stu.name = %@ and stu.age = %@",stu.name,stu.age);
}
}
}];
复制代码
[self.sessionM execQueryPQLPrepareStatementPQL:@"FROM Student WHERE name = ?"];
[self.sessionM setPrepareStatementPQLParameter:@[@"CreaterOS"]];
NSLog(@"%@",[self.sessionM execPrepareStatementPQL]);
复制代码
2020-06-27 16:26:11.404815+0800 Paintinglite[7025:389268] ( "<Student: 0x600000565420>", "<Student: 0x6000005657e0>" )
Paintinglite封装Sqlite3聚合函数,自动写入SQL语句就能够获得聚合结果。
[self.aggreageteF count:[self.sessionM getSqlite3] tableName:@"eletest" completeHandler:^(PaintingliteSessionError * _Nonnull sessionerror, Boolean success, NSUInteger count) {
if (success) {
NSLog(@"%zd",count);
}
}];
复制代码
[self.aggreageteF max:[self.sessionM getSqlite3] field:@"age" tableName:@"eletest" completeHandler:^(PaintingliteSessionError * _Nonnull sessionerror, Boolean success, double max) {
if (success) {
NSLog(@"%.2f",max);
}
}];
复制代码
[self.aggreageteF min:[self.sessionM getSqlite3] field:@"age" tableName:@"eletest" completeHandler:^(PaintingliteSessionError * _Nonnull sessionerror, Boolean success, double min) {
if (success) {
NSLog(@"%.2f",min);
}
}];
复制代码
[self.aggreageteF sum:[self.sessionM getSqlite3] field:@"age" tableName:@"eletest" completeHandler:^(PaintingliteSessionError * _Nonnull sessionerror, Boolean success, double sum) {
if (success) {
NSLog(@"%.2f",sum);
}
}];
复制代码
[self.aggreageteF avg:[self.sessionM getSqlite3] field:@"age" tableName:@"eletest" completeHandler:^(PaintingliteSessionError * _Nonnull sessionerror, Boolean success, double avg) {
if (success) {
NSLog(@"%.2f",avg);
}
}];
复制代码
Sqlite3开发默认一条插入语句是一个事务,假设有多个插入语句则会重复开起事务,这对资源消耗是巨大的,Paintinglite提供了开起事务的操做(显示事务)。
+ (void)begainPaintingliteTransaction:(sqlite3 *)ppDb;
+ (void)commit:(sqlite3 *)ppDb;
+ (void)rollback:(sqlite3 *)ppDb;
复制代码
平常开发结合
@try { } @catch (NSException *exception) { } @finally { }
使用
- (Boolean)cascadeInsert:(sqlite3 *)ppDb obj:(id)obj completeHandler:(void (^ __nullable)(PaintingliteSessionError *sessionError,Boolean success,NSMutableArray *resArray))completeHandler;
- (Boolean)cascadeUpdate:(sqlite3 *)ppDb obj:(id)obj condatation:(NSArray<NSString *> * __nonnull)condatation completeHandler:(void (^__nullable)(PaintingliteSessionError *sessionError,Boolean success,NSMutableArray *resArray))completeHandler;
- (Boolean)cascadeDelete:(sqlite3 *)ppDb obj:(id)obj condatation:(NSArray<NSString *> * __nonnull)condatation completeHandler:(void (^__nullable)(PaintingliteSessionError *sessionError,Boolean success,NSMutableArray *resArray))completeHandler;
复制代码
级联分为三个部分:
级联插入操做,咱们须要将两个有关系的表经过可变数组进行链接,例如: user表和student表有联系, 一个user能够包含多个student
那么,能够在user中设置可变数据保存多个student,而后将user对象交给Paintinglite就能够一次写入多个表的数据。
User *user = [[User alloc] init];
user.name = @"Jay";
user.age = [NSNumber numberWithInteger:40];
user.studentsArray = [NSMutableArray array];
Student *student = [[Student alloc] init];
student.name = @"Hony";
student.age = [NSNumber numberWithInteger:30];
Student *student1 = [[Student alloc] init];
student1.name = @"Jack";
student1.age = [NSNumber numberWithInteger:41];
[user.studentsArray addObject:student];
[user.studentsArray addObject:student1];
[self.cascade cascadeInsert:[self.sessionM getSqlite3] obj:user completeHandler:^(PaintingliteSessionError * _Nonnull sessionError, Boolean success, NSMutableArray * _Nonnull resArray) {
if (success) {
NSLog(@"%@",resArray);
}
}];
复制代码
name = 'CreaterOS' 对应user表
name = 'OS...' 对应student表
[self.cascade cascadeUpdate:[self.sessionM getSqlite3] obj:user condatation:@[@"WHERE name = 'CreaterOS'",@"WHERE name = 'OS...'"] completeHandler:^(PaintingliteSessionError * _Nonnull sessionError, Boolean success, NSMutableArray * _Nonnull resArray) {
if (success) {
NSLog(@"%@",resArray);
}
}];
复制代码
[self.cascade cascadeDelete:[self.sessionM getSqlite3] obj:user condatation:@[@"name = 'WHY'",@"name = 'YHD...'"] completeHandler:^(PaintingliteSessionError * _Nonnull sessionError, Boolean success, NSMutableArray * _Nonnull resArray) {
if (success) {
NSLog(@"%@",resArray);
}
}];
复制代码
Paintinglite为开发者提供了日志记录功能,能够记录开发中对sqlite3数据的关键操做,而且标有时间戳,开发者能够经过数据库名称轻松读取日志,也能够根据须要的时间节点或者成功失败的状态选择性的读取日志。方便了软件上线后的调试。
- (void)readLogFile:(NSString *__nonnull)fileName;
- (void)readLogFile:(NSString *)fileName dateTime:(NSDate *__nonnull)dateTime;
- (void)readLogFile:(NSString *)fileName logStatus:(PaintingliteLogStatus)logStatus;
- (void)removeLogFile:(NSString *)fileName;
复制代码
数据库迁移是开发人员常常关心的问题,对于sqlite3移植客户端SQL Server MySQL 和 Orcale一直是一个头疼的问题。Paintinglite很是友好的为开发者提供了四种数据库的备份文件,包括从建库到插入数据,Paintinglite为开发者写入了备份文件,开发者只须要上传这些sql文件并运行就能够获得和移动设备彻底同样的数据。
PaintingliteBackUpSqlite3,
PaintingliteBackUpMySql,
PaintingliteBackUpSqlServer,
PaintingliteBackUpORCALE
复制代码
- (Boolean)backupDataBaseWithName:(sqlite3 *)ppDb sqliteName:(NSString *)sqliteName type:(PaintingliteBackUpManagerDBType)type completeHandler:(void(^ __nullable)(NSString *saveFilePath))completeHandler;
复制代码

对于过大的数据量的表查询耗时操做是巨大的,Paintinglite测试阶段提供了拆分表的操做,将大表拆分红为多个小表,拆分的数额由开发者本身决定。 Paintinglite首次提供拆分表操做,模块尚在测试,后期版本迭代会重点优化这部分的资源消耗和CPU占用率问题。
/**
* tableName: 数据库名称
* basePoint: 拆分个数
*/
- (Boolean)splitTable:(sqlite3 *)ppDb tabelName:(NSString *__nonnull)tableName basePoint:(NSUInteger)basePoint;
复制代码
- (NSMutableArray *)selectWithSpliteFile:(sqlite3 *)ppDb tableName:(NSString *__nonnull)tableName basePoint:(NSUInteger)basePoint;
复制代码
- (Boolean)insertWithSpliteFile:(sqlite3 *)ppDb tableName:(NSString *)tableName basePoint:(NSUInteger)basePoint insertSQL:(NSString *)insertSQL;
复制代码
- (Boolean)updateWithSpliteFile:(sqlite3 *)ppDb tableName:(NSString *)tableName basePoint:(NSUInteger)basePoint updateSQL:(NSString *)updateSQL;
复制代码
- (Boolean)deleteWithSpliteFile:(sqlite3 *)ppDb tableName:(NSString *)tableName basePoint:(NSUInteger)basePoint deleteSQL:(NSString *)deleteSQL;
复制代码
PaintinglitePressureOS系统是一个压力测试系统,它对于数据库读写消耗时间,资源消耗和内存的使用进行了合理性的评估,并支持生成压力测试报告。(默认不生成报告)
Paintinglite能够根据不一样设备进行不一样的测算内存消耗状态,让开发者更清楚在不一样iPhone上设计更为合理的数据库表结构。
- (Boolean)paintingliteSqlitePressure;
复制代码
为了更好的实现操做,符合数据库规范,表名一概小写。
若是您有功能请求或错误报告,请随时发送863713745@qq.com上传问题,咱们会第一时间为您提供修订和帮助。也很是感谢您的支持。
若是您已找到了Paintinglite安全漏洞和须要修改的漏洞,则应尽快经过电子邮件将其发送至863713745@qq.com。感谢您的支持。