1

iOS アプリで DBAccess を使用する予定です。アプリの実行中にテーブルを削除する方法がわかりませんでした。

私たちの実際の使用例は、DB がいつ更新されたかを把握し、いくつかのテーブルを削除または変更することです。DBAccess も db にバージョン番号を付与していないようです。

4

1 に答える 1

1

その質問に答えるには少し複雑ですが、次のようになります。

DBAccess を使用して実際にテーブルを削除するにはどうすればよいでしょうか?

非常に短い答えは、直接できないということです。これをもう少し詳しく説明すると、DBObjectクラスから派生していないすべてのテーブルを削除していました。これにより、既存のデータベースまたは事前に入力されたファイルを使用していることが判明したユーザーの間で怒りと憎しみが生じDBAccess、一部のテーブルはクラスとして使用されず、サブクエリなどに使用されました。そのため、意見が少なくとも 50/50 に分かれるように思われる機能を削除しました。

必要に応じて、未使用のテーブルを直接削除する SQL コマンドを発行できます。このカテゴリを追加してブーツを埋めるだけで、データベース名に nil を渡すだけです。

@interface DBAccess (execSQL)

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

@end

ただし、ポイント1と2の両方は、次の「機能」によって処理されます。DBAccess移行とアップグレードを可能にするリビジョン システムが組み込まれています。使用するのは非常に骨の折れる作業であり、将来使用するためにより優れた GUI ベースのエディターを計画しているため、非表示のままです。ただし、オブジェクトに追加できる 2 つのメソッド呼び出しは次のとおりです。

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

エンティティはentityAtRevision:オブジェクトの現在のリビジョンで呼び出され、executeSQL:メソッドを使用して既存のデータを変更できます。重要なことに、このメソッドは、新しい/名前が変更された列が追加されたときに呼び出されますが、元の列が削除される前に呼び出されるため、既存のデータの準備が整っています。setRevision:ただし、そのメソッドを終了する前に、新しいリビジョン番号で呼び出す必要があります。

私が言うように、これは公開されていません。なぜなら、これはフレームワークの明らかな弱点であるため、はるかに優れた実装を開発したいからです (基礎となるモデルが同じままであっても)。

これが役に立てば幸いです、エイドリアン

于 2015-09-21T10:20:29.220 に答える