0

Android アプリに ContentProvider を実装しましたが、非常にうまく機能しますが、スキーマに変更を加えると、データベースがアップグレードされないようです。SQLiteOpenHelper に次のコードがあります。

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    Log.w(DEBUG_TAG, "Upgrading database. Existing contents will be lost. ["
        + oldVersion + "]->[" + newVersion + "]");
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_TUTORIALS);
    onCreate(db);
}

アプリを新しいスキーマで更新すると、すべての挿入が失敗しますが、古いバージョンをアンインストールして新しいバージョンのアプリをインストールすると、すべて正常に動作します。したがって、 onUpgrade() が呼び出されることはないと思います。oldVersion と newVersion は何を参照していますか? バージョンをどこかに指定する必要がありますか?

4

1 に答える 1

2

SQLiteOpenHelper にはバージョン引数があり、インクリメントonUpgradeを呼び出す必要がある場合:

public SQLiteOpenHelper (Context context, String name, SQLiteDatabase.CursorFactory factory, int version)

たとえば、次のクラスがあり、インクリメントdbVersionすると呼び出されます。

public class DBHelper extends SQLiteOpenHelper {

    private SQLiteDatabase m_Db;

    public DBHelper(Context context, String dbPath, int dbVersion) {

        super(context, dbPath, null, dbVersion);
        ...
        m_Db = getWritableDatabase();
    }
    ...
}
于 2012-10-09T11:37:57.830 に答える