我创建了一个这样的数据库:
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);
}
之后我将数据添加到数据库中,然后将数据库推送到模拟器上。但是当我关闭并重新运行应用程序时,它会从头开始再次创建数据库。所以,我的数据被删除了。怎么防止这个?我该怎么办?
答案 0 :(得分:1)
根据澄清注释,在另一个SQLite数据库管理器上编辑数据库时,似乎您的SQLite数据库user_version
号被覆盖。 Android使用此字段存储传递到version
构造函数的SQLiteOpenHelper
号,以及使用onUpgrade()
或onDowngrade()
从其他版本升级数据库时。默认情况下,版本为0,因此在使用版本1 SQLiteOpenHelper
时,您将从版本0升级到1,在您的情况下会破坏数据。
缓解此问题的一些方法:
仅使用Android帮助程序类创建和编辑SQLite数据库。
实现非破坏性onUpgrade()
,即不丢弃表的,只确保所需的表存在,并在需要时从旧表迁移数据。
如果使用外部数据库管理器,请发出PRAGMA user_version=n;
SQL命令以确保数据库版本为n
。 (对不起,没有使用Mozilla的工具,也无法判断是否有可能存在。)