如何防止从头开始重新创建数据库

时间:2013-05-16 17:43:31

标签: android database sqlite

我创建了一个这样的数据库:

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);

}

之后我将数据添加到数据库中,然后将数据库推送到模拟器上。但是当我关闭并重新运行应用程序时,它会从头开始再次创建数据库。所以,我的数据被删除了。怎么防止这个?我该怎么办?

1 个答案:

答案 0 :(得分:1)

根据澄清注释,在另一个SQLite数据库管理器上编辑数据库时,似乎您的SQLite数据库user_version号被覆盖。 Android使用此字段存储传递到version构造函数的SQLiteOpenHelper号,以及使用onUpgrade()onDowngrade()从其他版本升级数据库时。默认情况下,版本为0,因此在使用版本1 SQLiteOpenHelper时,您将从版本0升级到1,在您的情况下会破坏数据。

缓解此问题的一些方法:

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

  2. 实现非破坏性onUpgrade(),即不丢弃表的,只确保所需的表存在,并在需要时从旧表迁移数据。

  3. 如果使用外部数据库管理器,请发出PRAGMA user_version=n; SQL命令以确保数据库版本为n。 (对不起,没有使用Mozilla的工具,也无法判断是否有可能存在。)