1

クラス 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 に追加されることがわかりました。その結果、sdcard に 6 曲あるにもかかわらず、データベースには 454 曲が表示されました。これにより、テーブルを再度作成することを考えて、テーブルを削除する必要がありました。しかし今、テーブルが見つからないか、作成されていないことに行き詰まっています。このクラスのオブジェクトを作成するたびに onCreate() メソッドを呼び出すべきではないでしょうか?

4

3 に答える 3

1

SQLiteOpenHelper実装を参照するとonCreate、データベース ファイルが見つからない場合にメソッドが 1 回だけ呼び出され、データベース ファイルが作成されます。その後、onUpgradeデータベースのバージョン番号がインクリメントされていることが判明するたびに呼び出されます。

問題をすばやく解決するには、アプリをアンインストールしてから再度インストールしてください。これにより、データベースがなくなるため、onCreateもう一度呼び出すことができます。

于 2012-10-29T14:43:48.220 に答える
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 ステートメントを使用して、新しい列をテーブル シグネチャに追加できます。

于 2012-10-29T14:49:04.290 に答える
0

onCreate前回アプリケーションを実行したときなど、データベースがすでに作成されている場合は呼び出されません。

アプリをアンインストールしてから再度インストールしてください - db ファイルも削除されます

またはdbバージョンをインクリメントすると、onUpgrade呼び出されます。onUpgradeすべてのテーブルを削除して onCreate を呼び出すことができます

于 2012-10-29T14:44:26.110 に答える