首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >递归调用的getWritableDatabase

递归调用的getWritableDatabase
EN

Stack Overflow用户
提问于 2012-02-06 04:51:47
回答 1查看 5.7K关注 0票数 7

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

代码语言:javascript
复制
    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);

    }

但是,当我启动应用程序并尝试升级数据库时,我得到了以下异常:

代码语言:javascript
复制
    ...Caused by: java.lang.IllegalStateException: getWritableDatabase called recursively

有没有人知道我如何解决这个问题,以及是什么导致了这个问题?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-06 05:09:09

别给getWritableDatabase()打电话。使用传入的参数:

代码语言:javascript
复制
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(),而且是无限的。

票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9152907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档