@@ -58,11 +58,32 @@ @interface LKDBHelper ()
58
58
@end
59
59
60
60
@implementation LKDBHelper
61
+ @synthesize encryptionKey = _encryptionKey;
62
+
63
+ static BOOL LKDBLogErrorEnable = NO ;
64
+ +(void )setLogError : (BOOL )logError
65
+ {
66
+ if (LKDBLogErrorEnable == logError) {
67
+ return ;
68
+ }
69
+ #ifdef DEBUG
70
+ LKDBLogErrorEnable = logError;
71
+ NSMutableArray * dbArray = [self dbHelperSingleArray ];
72
+ @synchronized (dbArray)
73
+ {
74
+ [dbArray enumerateObjectsUsingBlock: ^(LKDBWeakObject* weakObj, NSUInteger idx, BOOL *stop) {
75
+ [weakObj.obj executeDB: ^(FMDatabase *db) {
76
+ db.logsErrors = LKDBLogErrorEnable;
77
+ }];
78
+ }];
79
+ }
80
+ #endif
81
+ }
82
+
61
83
+ (NSMutableArray *)dbHelperSingleArray
62
84
{
63
85
static __strong NSMutableArray * dbArray;
64
86
static dispatch_once_t onceToken;
65
-
66
87
dispatch_once (&onceToken, ^{
67
88
dbArray = [NSMutableArray array ];
68
89
});
@@ -83,7 +104,6 @@ + (LKDBHelper*)dbHelperWithPath:(NSString*)dbFilePath save:(LKDBHelper*)helper
83
104
else if (dbFilePath) {
84
105
for (NSInteger i = 0 ; i < dbArray.count ;) {
85
106
LKDBWeakObject* weakObj = [dbArray objectAtIndex: i];
86
-
87
107
if (weakObj.obj == nil ) {
88
108
[dbArray removeObjectAtIndex: i];
89
109
continue ;
@@ -92,7 +112,6 @@ + (LKDBHelper*)dbHelperWithPath:(NSString*)dbFilePath save:(LKDBHelper*)helper
92
112
instance = weakObj.obj ;
93
113
break ;
94
114
}
95
-
96
115
i++;
97
116
}
98
117
}
@@ -217,11 +236,11 @@ - (void)setDBPath:(NSString*)filePath
217
236
}
218
237
#endif
219
238
239
+ // /reset encryptionKey
220
240
_encryptionKey = nil ;
221
-
222
- // 不打印错误日志
241
+
223
242
[_bindingQueue inDatabase: ^(FMDatabase* db) {
224
- db.logsErrors = NO ;
243
+ db.logsErrors = LKDBLogErrorEnable ;
225
244
}];
226
245
}
227
246
@@ -237,14 +256,12 @@ - (void)executeDB:(void (^)(FMDatabase* db))block
237
256
if (_bindingQueue == nil ) {
238
257
self.bindingQueue = [[FMDatabaseQueue alloc ] initWithPath: _dbPath];
239
258
[_bindingQueue inDatabase: ^(FMDatabase* db) {
240
- // 不打印错误日志
241
- db.logsErrors = NO ;
259
+ db.logsErrors = LKDBLogErrorEnable;
242
260
if (_encryptionKey.length > 0 ) {
243
261
[db setKey: _encryptionKey];
244
262
}
245
263
}];
246
264
}
247
-
248
265
[_bindingQueue inDatabase: ^(FMDatabase* db) {
249
266
self.usingdb = db;
250
267
block (db);
@@ -353,55 +370,42 @@ - (NSMutableArray*)extractQuery:(NSMutableString*)query where:(id)where
353
370
// dic where parse
354
371
- (NSString *)dictionaryToSqlWhere : (NSDictionary *)dic andValues : (NSMutableArray *)values
355
372
{
356
- NSMutableString * wherekey = [NSMutableString stringWithCapacity: 0 ];
357
-
358
- if ((dic != nil ) && (dic.count > 0 )) {
359
- NSArray * keys = dic.allKeys ;
360
-
361
- for (NSInteger i = 0 ; i < keys.count ; i++) {
362
- NSString * key = [keys objectAtIndex: i];
363
- id va = [dic objectForKey: key];
364
-
365
- if ([va isKindOfClass: [NSArray class ]]) {
366
- NSArray * vlist = va;
367
-
368
- if (vlist.count == 0 ) {
369
- continue ;
370
- }
371
-
372
- if (wherekey.length > 0 ) {
373
- [wherekey appendString: @" and" ];
374
- }
375
-
376
- [wherekey appendFormat: @" %@ in(" , key];
377
-
378
- for (NSInteger j = 0 ; j < vlist.count ; j++) {
379
- [wherekey appendString: @" ?" ];
380
-
381
- if (j == vlist.count - 1 ) {
382
- [wherekey appendString: @" )" ];
383
- }
384
- else {
385
- [wherekey appendString: @" ," ];
386
- }
373
+ if (dic.count == 0 ) {
374
+ return @" " ;
375
+ }
376
+
387
377
388
- [values addObject: [vlist objectAtIndex: j]];
378
+ NSMutableString * wherekey = [NSMutableString stringWithCapacity: 0 ];
379
+ [dic enumerateKeysAndObjectsUsingBlock: ^(NSString * key, id obj, BOOL *stop) {
380
+ if ([obj isKindOfClass: [NSArray class ]]) {
381
+ NSArray * vlist = obj;
382
+ if (vlist.count == 0 ) {
383
+ return ;
384
+ }
385
+ if (wherekey.length > 0 ) {
386
+ [wherekey appendString: @" and" ];
387
+ }
388
+ [wherekey appendFormat: @" %@ in(" , key];
389
+ [vlist enumerateObjectsUsingBlock: ^(id vlist_obj, NSUInteger idx, BOOL *stop) {
390
+ [wherekey appendString: @" ?" ];
391
+ if (idx > 0 ) {
392
+ [wherekey appendString: @" ," ];
389
393
}
394
+ [values addObject: vlist_obj];
395
+ }];
396
+ [wherekey appendString: @" )" ];
397
+ }
398
+ else {
399
+ if (wherekey.length > 0 ) {
400
+ [wherekey appendFormat: @" and %@ =?" , key];
390
401
}
391
402
else {
392
- if (wherekey.length > 0 ) {
393
- [wherekey appendFormat: @" and %@ =?" , key];
394
- }
395
- else {
396
- [wherekey appendFormat: @" %@ =?" , key];
397
- }
398
-
399
- [values addObject: va];
403
+ [wherekey appendFormat: @" %@ =?" , key];
400
404
}
405
+ [values addObject: obj];
401
406
}
402
- }
403
-
404
- return wherekey;
407
+ }];
408
+ return [wherekey copy ];
405
409
}
406
410
407
411
// where sql statements about model primary keys
@@ -447,17 +451,32 @@ - (NSMutableString*)primaryKeyWhereSQLWithModel:(NSObject*)model addPValues:(NSM
447
451
}
448
452
449
453
#pragma mark - set key
450
- - ( void ) setEncryptionKey : (NSString *) encryptionKey
454
+ -( BOOL ) setKey : (NSString *) key
451
455
{
452
- _encryptionKey = encryptionKey ;
453
-
454
- if (_bindingQueue && (encryptionKey .length > 0 )) {
455
- [self executeDB: ^(FMDatabase* db) {
456
- [db setKey: _encryptionKey];
456
+ _encryptionKey = [key copy ] ;
457
+ __block BOOL success = NO ;
458
+ if (_bindingQueue && (_encryptionKey .length > 0 )) {
459
+ [self executeDB: ^(FMDatabase * db) {
460
+ success = [db setKey: _encryptionKey];
457
461
}];
458
462
}
463
+ return success;
464
+ }
465
+ -(BOOL )rekey : (NSString *)key
466
+ {
467
+ _encryptionKey = [key copy ];
468
+ __block BOOL success = NO ;
469
+ if (_bindingQueue && (_encryptionKey.length > 0 )) {
470
+ [self executeDB: ^(FMDatabase *db) {
471
+ success = [db rekey: _encryptionKey];
472
+ }];
473
+ }
474
+ return success;
475
+ }
476
+ -(NSString *)encryptionKey
477
+ {
478
+ return _encryptionKey;
459
479
}
460
-
461
480
#pragma mark - dealloc
462
481
- (void )dealloc
463
482
{
@@ -749,7 +768,7 @@ - (void)rowCount:(Class)modelClass where:(id)where callback:(void (^)(NSInteger)
749
768
{
750
769
if (callback) {
751
770
LKDBCode_Async_Begin
752
- NSInteger result = [sself rowCountWithTableName: [modelClass getTableName ] where: where];
771
+ NSInteger result = [sself rowCountWithTableName: [modelClass getTableName ] where: where];
753
772
callback (result);
754
773
LKDBCode_Async_End
755
774
}
@@ -793,7 +812,7 @@ - (void)search:(Class)modelClass where:(id)where orderBy:(NSString*)orderBy offs
793
812
{
794
813
if (block) {
795
814
LKDBCode_Async_Begin
796
- LKDBQueryParams* params = [[LKDBQueryParams alloc ] init ];
815
+ LKDBQueryParams* params = [[LKDBQueryParams alloc ] init ];
797
816
params.toClass = modelClass;
798
817
799
818
if ([where isKindOfClass: [NSDictionary class ]]) {
@@ -897,7 +916,7 @@ - (NSMutableArray*)searchWithParams:(LKDBQueryParams*)params
897
916
{
898
917
if (params.callback ) {
899
918
LKDBCode_Async_Begin
900
- NSMutableArray * array = [sself searchBaseWithParams: params];
919
+ NSMutableArray * array = [sself searchBaseWithParams: params];
901
920
params.callback (array);
902
921
LKDBCode_Async_End return nil ;
903
922
}
@@ -1094,7 +1113,7 @@ - (BOOL)insertToDB:(NSObject*)model
1094
1113
- (void )insertToDB : (NSObject *)model callback : (void (^)(BOOL ))block
1095
1114
{
1096
1115
LKDBCode_Async_Begin
1097
- BOOL result = [sself insertBase: model];
1116
+ BOOL result = [sself insertBase: model];
1098
1117
1099
1118
if (block) {
1100
1119
block (result);
@@ -1115,7 +1134,7 @@ - (BOOL)insertWhenNotExists:(NSObject*)model
1115
1134
- (void )insertWhenNotExists : (NSObject *)model callback : (void (^)(BOOL ))block
1116
1135
{
1117
1136
LKDBCode_Async_Begin
1118
- BOOL result = [sself insertWhenNotExists: model];
1137
+ BOOL result = [sself insertWhenNotExists: model];
1119
1138
1120
1139
if (block) {
1121
1140
block (result);
@@ -1220,7 +1239,7 @@ - (BOOL)updateToDB:(NSObject*)model where:(id)where
1220
1239
- (void )updateToDB : (NSObject *)model where : (id )where callback : (void (^)(BOOL ))block
1221
1240
{
1222
1241
LKDBCode_Async_Begin
1223
- BOOL result = [sself updateToDBBase: model where: where];
1242
+ BOOL result = [sself updateToDBBase: model where: where];
1224
1243
1225
1244
if (block) {
1226
1245
block (result);
@@ -1352,7 +1371,7 @@ - (BOOL)deleteToDB:(NSObject*)model
1352
1371
- (void )deleteToDB : (NSObject *)model callback : (void (^)(BOOL ))block
1353
1372
{
1354
1373
LKDBCode_Async_Begin
1355
- BOOL isDeleted = [sself deleteToDBBase: model];
1374
+ BOOL isDeleted = [sself deleteToDBBase: model];
1356
1375
1357
1376
if (block) {
1358
1377
block (isDeleted);
@@ -1412,7 +1431,7 @@ - (BOOL)deleteWithClass:(Class)modelClass where:(id)where
1412
1431
- (void )deleteWithClass : (Class )modelClass where : (id )where callback : (void (^)(BOOL ))block
1413
1432
{
1414
1433
LKDBCode_Async_Begin
1415
- BOOL isDeleted = [sself deleteWithTableName: [modelClass getTableName ] where: where];
1434
+ BOOL isDeleted = [sself deleteWithTableName: [modelClass getTableName ] where: where];
1416
1435
1417
1436
if (block) {
1418
1437
block (isDeleted);
@@ -1552,6 +1571,15 @@ + (void)clearFileWithTable:(Class)modelClass columns:(NSArray*)columns type:(NSI
1552
1571
@end
1553
1572
1554
1573
@implementation LKDBHelper (Deprecated_Nonfunctional)
1574
+ -(void )setEncryptionKey : (NSString *)encryptionKey
1575
+ {
1576
+ _encryptionKey = [encryptionKey copy ];
1577
+ if (_bindingQueue && (_encryptionKey.length > 0 )) {
1578
+ [self executeDB: ^(FMDatabase* db) {
1579
+ [db setKey: _encryptionKey];
1580
+ }];
1581
+ }
1582
+ }
1555
1583
+ (LKDBHelper*)sharedDBHelper
1556
1584
{
1557
1585
return [LKDBHelper getUsingLKDBHelper ];
0 commit comments