getWritableDatabase以递归方式调用

时间:2012-02-05 20:51:47

标签: 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

有谁知道我如何解决这个问题以及究竟是什么导致它?

由于

1 个答案:

答案 0 :(得分:23)

请勿致电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()

相关问题