2017-01-29 8 views
0

ここではSQLiteのバージョン管理について多くの回答があることを認識していますが、私の特定の問題の回答が見つかりませんでした。私はしばらくの間バージョン1でうまくやっていました。私はテーブルに別の列「TAG」を追加し、onUpgradeに次のコードを実装する必要がありました。AndroidのSQLite DBのバージョン2のエラー

@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL(DATABASE_CREATE); 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    if (oldVersion < 2) db.execSQL(DATABASE_ALTER_TAG); 
} 

素晴らしいです。問題ありません。 TAG列は、完全なアンインストール後に再インストールするまで、予想通りの読み書きをしていました。アンインストール/再インストールの前に動作していたコードを使用して、DBが動作しなくなりました。

アンインストール/再インストール後に「古いバージョン」がヌル(<ではない)で、TAG列が追加されていないためです。私は完全にはわかりませんが。私のonUpgradeコードは問題ですか?

私のデータベースをバージョン1のTAG列に書き換えることができましたが、将来の参照のために私のコードに何が間違っているかを知りたいと思います。

EDITのQUESTION

OK、これまでの回答に感謝します。私は、アプリケーションを新しくインストールしている人のためにDBを動作させる方法を理解しています。私はまた、バージョン1からバージョン2に向かう人のためにDBを動作させる方法も理解しています。私はそれを両方のユーザー(新しくインストールされた人とアップグレードしている人)の両方で動作させる方法をまだ理解していません。

+0

oldversionはnullにできません。これはプリミティブなデータ型です。エラーは、adbログを送信する場所です。 –

+0

DATABASE_CREATEステートメントに新しいTAG列を追加しましたか? –

+0

私はしませんでした。私の "DATABASE_ALTER_TAG"は列を追加します。私はなぜそれをonCreateとonUpgradeに追加する必要があるのか​​混乱しています。 – seekingStillness

答えて

1

あなたの前提は間違いです。 プリミティブデータ型はオブジェクトではないため、nullではありません

の作成ステートメントdb.execSQL(DATABASE_CREATE);に新しいデータベーステーブル構造が反映されていて、古いものではなく新しいTAG列が反映されていることを確認してください。

+0

OK、私はそれを行うことができます。私は、なぜonUpgradeステートメントが列を追加するときにそれを追加する必要があるのか​​混乱しています。プライベート静的最終文字列DATABASE_ALTER_TAG = "ALTER TABLE walk_run_table列タグテキストを追加;"; – seekingStillness

+1

新規インストール時にonupgradeが呼び出されないためです。そのonUpgradeのためだけに呼ばれ、そのような単純な –

関連する問題