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传递给构造函数的数字,并在使用orSQLiteOpenHelper从另一个版本升级数据库时使用。默认情况下,版本为 0,因此在使用版本 1 时,您将从版本 0 升级到 1,在您的情况下,这会破坏数据。onUpgrade()onDowngrade()SQLiteOpenHelper

缓解问题的一些方法:

  1. 仅使用 Android 帮助程序类创建和编辑 SQLite 数据库。

  2. 实现一个非破坏性的onUpgrade(),即不删除表,只确保所需的表在那里,并在需要时从旧表迁移数据。

  3. 如果使用外部数据库管理器,请发出PRAGMA user_version=n;SQL 命令以确保数据库版本为n. (抱歉,没有使用过 Mozilla 的工具,无法判断它是否以及如何实现。)

于 2013-05-16T18:23:31.503 回答