我正在尝试使用以下代码更新数据库表:

    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/

10-11 20:04