android - 递归调用 getWritableDatabase

标签 android sqlite

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

    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/

相关文章:

python - 使用 SQLite 将内联查询结果分配给 SQLAlchemy 中的列

php - 使用android将文件上传到服务器

android - 如何使用自己的样式删除 DialogFragment 下的第二个背景

android - Gradle Wrapper 4.6 无法识别测试过滤参数

android - SQLite 删除一行

node.js - windows平台下如何用nodejs制作加密的sqlite3数据库

android - 像 sqlite 中的运算符语法和 android

android - 将 iPhone PhoneGap 应用程序移植到 Android - 缩放问题

java - 转换 SQLite 查询日期格式

android - 是否可以更改此表?