DBOperation.m 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. //
  2. // DBOperation.m
  3. // zhuxun
  4. //
  5. // Created by winsoft on 17/4/24.
  6. //
  7. //
  8. #import "DBOperation.h"
  9. #import <FMDB/FMDB.h>
  10. #import "DBConfigureCenter.h"
  11. #import <MJExtension/MJExtension.h>
  12. //static FMDatabaseQueue *dbqueue;
  13. @interface DBOperation()
  14. @property (nonatomic , strong) FMDatabaseQueue *dbqueue;
  15. @end
  16. @implementation DBOperation
  17. + (instancetype)dbOperationWithPath:(NSString *)path
  18. {
  19. DBOperation *dbOperation = [[DBOperation alloc]init];
  20. if (!dbOperation.dbqueue) {
  21. dbOperation.dbqueue = [FMDatabaseQueue databaseQueueWithPath:path];
  22. }
  23. return dbOperation;
  24. }
  25. - (void)creatDBbySQL:(NSString *)sql Path:(NSString *)path
  26. {
  27. [self.dbqueue inDatabase:^(FMDatabase *db) {
  28. [db executeUpdate:sql];
  29. }];
  30. //dbqueue = [FMDatabaseQueue databaseQueueWithPath:path];
  31. // if (dbqueue == nil) {
  32. // dbqueue = [FMDatabaseQueue databaseQueueWithPath:path];
  33. // }
  34. //
  35. // [dbqueue inDatabase:^(FMDatabase *db) {
  36. // [db executeUpdate:sql];
  37. //
  38. // }];
  39. }
  40. - (void)creatDBWithTableName:(NSString *)tableName dbModelClass:(Class)dbModelClass Path:(NSString *)path autoUpgrade:(BOOL)autoUpgrade
  41. {
  42. NSString *sql = [DBConfigureCenter getDBTableWithTableName:tableName className:dbModelClass];
  43. [self creatDBbySQL:sql Path:path];
  44. //自动升级.
  45. if (autoUpgrade) {
  46. [self judgeCloumExistAndAutoUpdateWithTableName:tableName allCloumnName_TypeArray:[DBConfigureCenter sqlCloumnCheckWithClassName:dbModelClass]];
  47. }
  48. }
  49. //自动升级.
  50. - (void)judgeCloumExistAndAutoUpdateWithTableName:(NSString *)tableName allCloumnName_TypeArray:(NSArray<DBStructModel *> *)allCloumnName_TypeArray
  51. {
  52. NSString *sql = [NSString stringWithFormat:@"pragma table_info (%@)",tableName];
  53. __weak typeof(self)weakself = self;
  54. [self quaryDBbySQL:sql result:^(NSMutableArray *array) {
  55. NSArray *dbStructArray = [DBStructModel mj_objectArrayWithKeyValuesArray:array];
  56. for (DBStructModel *dbModel in allCloumnName_TypeArray) {
  57. NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name = %@",dbModel.name];
  58. //如果name在数据库返回的字段内找不到,则插入.
  59. NSArray *targetKeyArray = [dbStructArray filteredArrayUsingPredicate:predicate];
  60. if (!targetKeyArray.count) {
  61. NSString *alertStr = [NSString stringWithFormat:@"ALTER TABLE %@ ADD %@ %@",tableName,dbModel.name,dbModel.type];
  62. [weakself addDataToDBWithSQL:alertStr];
  63. }
  64. }
  65. }];
  66. }
  67. //查询目标群组
  68. - (void)quaryDBbySQL:(NSString *)sql result:(void(^)(NSMutableArray *array))result
  69. {
  70. __block FMResultSet *rs = nil;
  71. NSMutableArray *tempArray = [NSMutableArray array];
  72. [self.dbqueue inDatabase:^(FMDatabase *db) {
  73. rs = [db executeQuery:sql];
  74. while (rs.next) {
  75. //获取nsdata
  76. // NSData *data = rs.resultDictionary ;//[rs dataForColumn:nil];
  77. // //将nsdata转成weibostatusmodel
  78. // GroupObject *groupObject = [NSKeyedUnarchiver unarchiveObjectWithData:data];
  79. // [tempArray addObject:groupObject];
  80. NSDictionary *dict = rs.resultDictionary;
  81. [tempArray addObject:dict];
  82. }
  83. }];
  84. if (tempArray.count) {
  85. result(tempArray);
  86. }else result (nil);
  87. }
  88. //插入模型
  89. - (void)addDataToDBbySQL:(NSString *)sql statuDBmodel:(id )model
  90. {
  91. //遍历model...
  92. // [dbqueue inDatabase:^(FMDatabase *db) {
  93. // [db executeUpdate:sql, dbmodel.access_token,dbmodel.idstr
  94. // ,dbmodel.data];
  95. // }];
  96. }
  97. - (void)addDataToDBWithSQL:(NSString *)sql
  98. {
  99. [self.dbqueue inDatabase:^(FMDatabase *db) {
  100. [db executeUpdate:sql];
  101. }];
  102. }
  103. @end