2016-09-16 3 views
0

SQLiteOpenHelperの場合、onCreateの中に新しいテーブルを追加すると、onUpgradeの中に何かする必要がありますか?私は全く新しいテーブルを追加しています。私はバージョン番号を変更する必要があると信じますが、onUpgradeは空のままにしておきます。あれは正しいですか?sqliteに新しいテーブルを追加する

+0

あなたはすでにあなたのアプリの以前のバージョンをリリースしましたか? –

+0

はい、あります:)。 –

答えて

2

既存のアプリケーションのインストールでこの新しいテーブルを追加する場合は、バージョンを増やして、適切なonUpgrade()実装を提供するとともに、テーブルをonCreate()に追加する必要があります。 。

空のonUpgrade()の実装では不十分です。それは実際に何かをしなければならない。一部の人はすべてのテーブルを削除し、onCreate()を直接呼び出すだけですが、既存のデータを保持しようとすると明らかにうまく機能しません。私は通常、ユーザーが1つ以上のバージョン(たとえば、バージョン3を公開し、ユーザーはまだバージョン1になっている)の場合、必要なすべてのアップグレードを順番に実行します。

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    switch (oldVersion) { 
     case 1: 
      db.execSQL("CREATE TABLE " + ...); 
      // no break statement, so case 2 will execute after this. 
     case 2: 
      // more execSQL(), etc 
    } 
} 
+0

あなただけが開発しているので(まだ他の誰もまだアプリケーションを持っていないので)、アップグレードをスキップして 'onCreate()'を実行するだけで、データベースを削除して再作成する必要があることに注意してください。これを行うには、アンインストールして再インストールするか、[設定]> [アプリ]でアプリを見つけてそこのデータを消去します。 – Karakuri

0

onUpgradeは、バージョン番号を増やす場合にのみ呼び出されます。

これを実装するには、変更したテーブルを再作成し、既存のデータをコピーする必要があります。このトピックに関する多くのチュートリアルがあります。

まだ学習していない場合は実装する必要はありませんが、そうしないとスキーマを変更すると、デバイスからアプリをアンインストールする必要があります。変更しないと、変更は適用されません。

1

onCreate()は、既にユーザーが既にアプリをインストールしている場合は呼び出されません。したがって、onUpgrade()に新しいテーブルを作成する必要があります。データベースのバージョン番号を増やしてください。

両方のコールバックメソッドからコールできるように、ヘルパーメソッドでテーブルを作成するコードを作成することをお勧めします。これにより、テーブルを作成するコードを変更する必要が生じた場合にエラーが発生する可能性が減ります。

+0

良い点。ありがとう。 +1 –

関連する問題