如何使用 DBAccess iOS ORM 删除 table

How to drop the table with DBAccess iOS ORM

我们计划在我们的 iOS 应用程序中使用 DBAccess。我们无法找到在应用程序 运行 时删除 table 的方法。

我们的实际用例是找出数据库何时更新,然后删除或更改一些 table。 DBAccess 似乎也没有将版本号提供给 db。

这个问题回答起来有点费解,但这里是:

我们如何使用 DBAccess 删除 table?

非常简短的回答是,你不能直接。为了进一步解释这一点,我们过去常常删除所有不是从 DBObject class 派生的 table。这在我们发现的用户中引起了愤怒和仇恨,他们正在使用 DBAccess 但对于现有数据库或预填充文件,一些 tables 没有用作 classes 但用于子查询等。所以我们删除了这个功能,似乎至少有 50/50 的意见分歧。

如果您愿意,您可以发出 SQL 命令直接删除未使用的 tables,只需添加此类别并填充您的靴子,只需为数据库名称传递 nil。

@interface DBAccess (execSQL)

+(void)executeSQL:(NSString*)sql inDatabase:(NSString*)dbName;

@end

然而,第 1 点和第 2 点都由下一个 "feature" 处理。我们在 DBAccess 中内置了一个修订系统以支持迁移和升级。它一直是隐藏的,因为它使用起来很费力,我们正在计划一个更好的基于 GUI 的编辑器供将来使用。但是您可以添加到您的对象的两个方法调用如下:

+ (void)setRevision:(int)revision 
+ (void)entityAtRevision:(int)revision

您的实体将在 entityAtRevision: 上调用对象的当前修订版,然后您可以使用 executeSQL: 方法对现有数据进行更改。重要的是,在添加 new/renamed 列但在删除原始列之前调用此方法,以便现有数据准备就绪。但是,在退出该方法之前,您必须使用新的修订号调用 setRevision:

正如我所说,这还没有发布,因为我们想要开发一个更好的实现(即使底层模型保持不变),因为这是框架的一个非常明显的弱点。

希望这对您有所帮助, 阿德里安