我有一个DatabaseHandler类。我使用以下代码覆盖了onCreate(SQLiteDatabase db)方法:
String CREATE_TABLE = "CREATE TABLE IF NOT EXISTS " + TABLE_SONG + "(" + ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
SONG_TITLE + " TEXT," + ARTIST_NAME + " TEXT," + GENRE + " TEXT," +
SONG_PATH + " TEXT" + ")";
db.execSQL(CREATE_TABLE);
但我发现每次打开模拟器时都会有额外的项目附加到TABLE_SONG,因此即使我在SD卡中有6首歌曲,数据库也会显示454首歌曲。这迫使我放弃桌子,想到再次重新创建它。但现在我被困在桌子上找不到或者没有被创造出来。难道每次创建这个类的对象时都应该调用onCreate()方法吗?
答案 0 :(得分:1)
参考SQLiteOpenHelper
实现,onCreate
方法只在找不到数据库文件时调用一次,导致它创建一个。稍后,只要发现数据库版本号递增,就会调用onUpgrade
。
要快速解决问题,只需卸载然后再重新安装该应用即可。这将导致您的数据库消失,因此允许再次调用onCreate
。
答案 1 :(得分:0)
onCreate
,例如在您上次运行应用程序期间。
卸载您的应用并重新安装 - 它也将删除db文件
或增加db版本,这将导致调用onUpgrade
。在onUpgrade
中,您可以删除所有表并调用onCreate
答案 2 :(得分:0)
我同意waqas,请在下面找到示例代码
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME
+ ... ) ";
db.execSQL(CREATE_TABLE);}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Drop older table if exists
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
修改强> 使用onUpgrade()
在构造版本比打开的数据库版本更新的SQLiteOpenHelper时调用它。做什么取决于旧版本和新版本之间的数据库更改。如果不删除已更改的表,则唯一的情况是更改的位置超过添加的列。然后,您可以使用ALTER TABLE语句将新列添加到表签名。