2012-10-09 52 views
0

我爲我的android應用程序實現了一個ContentProvider,它工作得很好,但是當我對模式進行一些更改時,數據庫似乎沒有升級。 我有下面的代碼在我SQLiteOpenHelper:如何在android上升級sqlite數據庫?

@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引用了什麼?我需要在任何地方指定版本嗎?

回答

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(); 
    } 
    ... 
}