表未找到Android

时间:2012-10-29 14:37:45

标签: android sqlite

我有一个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()方法吗?

3 个答案:

答案 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语句将新列添加到表签名。