我们计划将 DBAccess 与我们的 iOS 应用程序一起使用。我们想不出在应用程序运行时删除表的方法。
我们的实际用例是确定数据库何时更新,然后删除或更改一些表。DBAccess 似乎也没有给 db 提供版本号。
这个问题回答起来有点复杂,但这里是:
我们如何才能真正使用 DBAccess 删除表?
很简短的回答是,你不能直接。为了进一步解释这一点,我们曾经删除所有不是从DBObject
类派生的表。这在我们发现的用户中引起了愤怒和仇恨,DBAccess
但在使用现有数据库或预填充文件的情况下,一些表没有用作类,而是用于子查询等。所以我们删除了这个功能,似乎至少有 50/50 的意见分歧。
如果您愿意,您可以发出 SQL 命令直接删除未使用的表,只需添加此类别并填写您的靴子,只需传递 nil 作为数据库名称。
@interface DBAccess (execSQL)
+(void)executeSQL:(NSString*)sql inDatabase:(NSString*)dbName;
@end
然而,第 1 点和第 2 点都由下一个“特征”处理。我们有一个内置的修订系统DBAccess
来支持迁移和升级。它一直是隐藏的,因为它使用起来非常费力,我们正在计划一个更好的基于 GUI 的编辑器以供将来使用。但是您可以添加到对象的两个方法调用如下:
+ (void)setRevision:(int)revision
+ (void)entityAtRevision:(int)revision
您的实体将被entityAtRevision:
对象的当前版本调用,然后您可以使用该executeSQL:
方法对现有数据进行更改。重要的是,在添加新/重命名列但在删除原始列之前调用此方法,以便现有数据准备就绪。但是,在您退出该方法之前,您必须setRevision:
使用新的修订号进行调用。
正如我所说,这还没有发布,因为我们想要开发一个更优秀的实现(即使底层模型保持不变),因为这对于框架来说是一个非常明显的弱点。
希望这会有所帮助,阿德里安