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 回答