LKDB+Manager.m 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. //
  2. // NSObject+TableManager.m
  3. // LKDBHelper
  4. //
  5. // Created by upin on 13-6-20.
  6. // Copyright (c) 2013年 ljh. All rights reserved.
  7. //
  8. #import "LKDB+Manager.h"
  9. #import "LKDBHelper.h"
  10. @implementation NSObject (TableManager)
  11. +(int)getTableVersion
  12. {
  13. return 1;
  14. }
  15. +(LKTableUpdateType)tableUpdateForOldVersion:(int)oldVersion newVersion:(int)newVersion
  16. {
  17. return LKTableUpdateTypeDefault;
  18. }
  19. +(void)tableUpdateAddColumeWithPN:(NSString*)propertyName
  20. {
  21. LKModelInfos* infos = [self getModelInfos];
  22. LKDBProperty* property = [infos objectWithPropertyName:propertyName];
  23. NSAssert(property, @"#error %@ add colume name, not exists property name %@",NSStringFromClass(self),propertyName);
  24. [self tableUpdateAddColumeWithName:property.sqlColumeName sqliteType:property.sqlColumeType];
  25. }
  26. +(void)tableUpdateAddColumeWithName:(NSString*)columeName sqliteType:(NSString*)sqliteType
  27. {
  28. NSString* alertSQL =[NSString stringWithFormat:@"alter table %@ add column %@ %@ ",[self getTableName],columeName,sqliteType];
  29. [[self getUsingLKDBHelper] executeDB:^(FMDatabase *db) {
  30. [db executeUpdate:alertSQL];
  31. }];
  32. }
  33. @end
  34. @interface LKTableManager()
  35. @property(strong,nonatomic)NSMutableDictionary* tableInfos;
  36. @property(unsafe_unretained,nonatomic)LKDBHelper* dbhelper;
  37. @end
  38. @implementation LKTableManager
  39. - (id)initWithLKDBHelper:(LKDBHelper *)helper
  40. {
  41. self = [super init];
  42. if (self) {
  43. self.dbhelper = helper;
  44. self.tableInfos = [NSMutableDictionary dictionaryWithCapacity:0];
  45. [helper executeDB:^(FMDatabase *db) {
  46. [db executeUpdate:@"CREATE TABLE IF NOT EXISTS LKTableManager(table_name text primary key,version integer)"];
  47. FMResultSet* set = [db executeQuery:@"select table_name,version from LKTableManager"];
  48. while ([set next]) {
  49. [_tableInfos setObject:[NSNumber numberWithInt:[set intForColumnIndex:1]] forKey:[set stringForColumnIndex:0]];
  50. }
  51. [set close];
  52. }];
  53. }
  54. return self;
  55. }
  56. -(int)versionWithName:(NSString *)name
  57. {
  58. return [[_tableInfos objectForKey:name] intValue];
  59. }
  60. -(void)setTableName:(NSString *)name version:(int)version
  61. {
  62. [_tableInfos setObject:[NSNumber numberWithInt:version] forKey:name];
  63. [_dbhelper executeDB:^(FMDatabase *db) {
  64. NSString* replaceSQL = [NSString stringWithFormat:@"replace into LKTableManager(table_name,version) values('%@',%d)",name,version];
  65. [db executeUpdate:replaceSQL];
  66. }];
  67. }
  68. -(void)clearTableInfos
  69. {
  70. [_dbhelper executeDB:^(FMDatabase *db) {
  71. [db executeUpdate:@"delete from LKTableManager"];
  72. [db executeUpdate:@"CREATE TABLE IF NOT EXISTS LKTableManager(table_name text primary key,version integer)"];
  73. }];
  74. [self.tableInfos removeAllObjects];
  75. }
  76. @end