FFDBSafeOperation.m 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. //
  2. // FFDBSafeOperation.m
  3. // FFDB
  4. //
  5. // Created by Fidetro on 2017/5/15.
  6. // Copyright © 2017年 Fidetro. All rights reserved.
  7. //
  8. // https://github.com/Fidetro/FFDB
  9. #import "FFDBSafeOperation.h"
  10. #import "FFDBLog.h"
  11. #import "FFDataBaseModel+Sqlite.h"
  12. #import "FFDataBaseModel+Custom.h"
  13. #import "NSObject+FIDProperty.h"
  14. #import "NSString+FFDBSQLStatement.h"
  15. @implementation FFDBSafeOperation
  16. + (NSArray <__kindof FFDataBaseModel *>*)selectObjectWithFFDBClass:(Class)dbClass
  17. {
  18. return [FFDBSafeOperation selectObjectWithFFDBClass:dbClass format:nil];
  19. }
  20. + (NSArray <__kindof FFDataBaseModel *>*)selectObjectWithFFDBClass:(Class)dbClass
  21. format:(NSString *)format
  22. {
  23. FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:[FFDBManager databasePath]];
  24. NSMutableArray *objectList = [NSMutableArray array];
  25. NSArray *dataColumns = [dbClass columnsOfSelf];
  26. [queue inDatabase:^(FMDatabase *db) {
  27. FMResultSet *resultSet;
  28. resultSet = [db executeQuery:[NSString stringWithSelectColumns:nil fromClasses:@[dbClass] SQLStatementWithFormat:format]];
  29. while ([resultSet next])
  30. {
  31. id object = [[dbClass alloc]init];
  32. for (NSString *propertyname in dataColumns)
  33. {
  34. NSString *result = [resultSet stringForColumn:propertyname];
  35. NSString *objStr = [result length] == 0 ? @"" :result;
  36. [object setPropertyWithName:propertyname object:objStr];
  37. }
  38. [object setPropertyWithName:@"primaryID" object:[resultSet stringForColumn:@"primaryID"]];
  39. [objectList addObject:object];
  40. }
  41. }];
  42. return [objectList copy];
  43. }
  44. + (void)insertObjectList:(NSArray <__kindof FFDataBaseModel *>*)objectList
  45. {
  46. FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:[FFDBManager databasePath]];
  47. [queue inDatabase:^(FMDatabase *db) {
  48. for (FFDataBaseModel *dbModel in objectList)
  49. {
  50. NSString *sql = [NSString stringWithInsertObject:dbModel columns:nil];
  51. BOOL result = [db executeUpdate:sql];
  52. if (result == NO)
  53. {
  54. FFDBDLog(@"error");
  55. }
  56. }
  57. }];
  58. }
  59. + (void)updateObjectList:(NSArray<__kindof FFDataBaseModel *> *)objectList
  60. {
  61. FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:[FFDBManager databasePath]];
  62. [queue inDatabase:^(FMDatabase *db) {
  63. for (FFDataBaseModel *dbModel in objectList)
  64. {
  65. NSString *sql = [NSString stringWithUpdateObject:dbModel columns:nil];
  66. BOOL result = [db executeUpdate:sql];
  67. if (result == NO)
  68. {
  69. FFDBDLog(@"error");
  70. }
  71. }
  72. }];
  73. }
  74. + (BOOL)updateObjectWithFFDBClass:(Class)dbClass format:(NSString *)format
  75. {
  76. FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:[FFDBManager databasePath]];
  77. __block BOOL result = NO;
  78. [queue inDatabase:^(FMDatabase *db) {
  79. result = [db executeUpdate:[NSString stringWithUpdateFromClass:dbClass SQLStatementWithFormat:format]];
  80. }];
  81. return result;
  82. }
  83. + (void)deleteObjectList:(NSArray<__kindof FFDataBaseModel *> *)objectList
  84. {
  85. FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:[FFDBManager databasePath]];
  86. [queue inDatabase:^(FMDatabase *db) {
  87. for (FFDataBaseModel *dbModel in objectList)
  88. {
  89. NSString *sql = [NSString stringWithDeleteFromClass:[dbModel class] SQLStatementWithFormat:[dbModel deleteObjectSqlstatement]];
  90. BOOL result = [db executeUpdate:sql];
  91. if (result == NO)
  92. {
  93. FFDBDLog(@"error");
  94. }
  95. }
  96. }];
  97. }
  98. + (BOOL)deleteObjectWithFFDBClass:(Class)dbClass
  99. format:(NSString *)format
  100. {
  101. FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:[FFDBManager databasePath]];
  102. __block BOOL result = NO;
  103. [queue inDatabase:^(FMDatabase *db) {
  104. result = [db executeUpdate:[NSString stringWithDeleteFromClass:dbClass SQLStatementWithFormat:format]];
  105. }];
  106. return result;
  107. }
  108. + (NSArray <__kindof FFDataBaseModel *>*)selectDBToClass:(Class)toClass
  109. SQLStatementWithFormat:(NSString *)format
  110. {
  111. FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:[FFDBManager databasePath]];
  112. NSMutableArray *objectList = [NSMutableArray array];
  113. NSArray *dataColumns = [toClass columnsOfSelf];
  114. [queue inDatabase:^(FMDatabase *db) {
  115. FMResultSet *resultSet;
  116. resultSet = [db executeQuery:format];
  117. while ([resultSet next])
  118. {
  119. id object = [[toClass alloc]init];
  120. for (NSString *propertyname in dataColumns)
  121. {
  122. NSString *result = [resultSet stringForColumn:propertyname];
  123. NSString *objStr = [result length] == 0 ? @"" :result;
  124. [object setPropertyWithName:propertyname object:objStr];
  125. }
  126. [objectList addObject:object];
  127. }
  128. }];
  129. return [objectList copy];
  130. }
  131. + (BOOL)updateDBWithSQLStatementWithFormat:(NSString *)format
  132. {
  133. FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:[FFDBManager databasePath]];
  134. __block BOOL result = NO;
  135. [queue inDatabase:^(FMDatabase *db) {
  136. result = [db executeUpdate:format];
  137. }];
  138. return result;
  139. }
  140. @end