我正在尝试使用以下代码更新我的数据库表:
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
String query = "ALTER TABLE names ADD COLUMN hidden integer default 0";
dbHelper.getWritableDatabase().rawQuery(query, null);
}
但是,当我启动应用程序并尝试升级数据库时,出现以下异常:
...Caused by: java.lang.IllegalStateException: getWritableDatabase called recursively
有谁知道我该如何解决这个问题以及究竟是什么导致了这个问题?
谢谢
最佳答案
不要调用 getWritableDatabase()
。使用传入的那个:
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
String query = "ALTER TABLE names ADD COLUMN hidden integer default 0";
db.rawQuery(query, null);
}
为什么?当您调用 getWritableDatabase()
时,OpenHelper 检测到数据库需要更新,因此它会启动您看到的递归警告。换句话说,您在 onUpgrade()
中。您调用 getWritableDatabase()
,它发现需要升级。如果没有进行检查,您将无限期地回到 onUpgrade()
。
关于android - 递归调用 getWritableDatabase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9152907/