1

次のようなデータベースを作成しました。

public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE " + "sorular"
                 + " (_id INTEGER PRIMARY KEY,"
                 + "soruIcerik TEXT," + " siklar1 TEXT," + " siklar2 TEXT,"
                 + " siklar3 TEXT," + "siklar4 TEXT," + "cevap INTEGER" 
                     + "zorluk INTEGER);");
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        db.execSQL("DROP TABLE IF EXIST sorular");
        onCreate(db);

}

その後、データベースにデータを追加し、データベースをエミュレーターにプッシュしました。しかし、アプリケーションを閉じて再実行すると、データベースが最初から作成されます。だから、私のデータは削除されます。これを防ぐ方法は?私は何をすべきか?

4

1 に答える 1

1

コメントを明確にすることに基づいて、user_version別の SQLite データベース マネージャーでデータベースを編集すると、SQLite データベース番号が上書きされるようです。Android はこのフィールドを使用して、コンストラクターversionに渡された数値を格納し、またはSQLiteOpenHelperを使用して別のバージョンからデータベースをアップグレードするときに使用します。デフォルトでは、バージョンは 0 であるため、バージョン 1 を使用すると、バージョン 0 から 1 にアップグレードされ、この場合はデータが破壊されます。onUpgrade()onDowngrade()SQLiteOpenHelper

問題を軽減するいくつかの方法:

  1. Android ヘルパー クラスを使用して、SQLite データベースのみを作成および編集します。

  2. 非破壊的な を実装しますonUpgrade()。つまり、テーブルを削除せず、必要なテーブルが存在することだけを確認し、必要に応じて古いテーブルからデータを移行します。

  3. 外部データベース マネージャーを使用している場合は、PRAGMA user_version=n;SQL コマンドを発行して、データベースのバージョンがn. (申し訳ありませんが、Mozilla のツールを使用したことがないため、Mozilla でそれが可能かどうか、どのように可能かはわかりません。)

于 2013-05-16T18:23:31.503 に答える