在android中的sqlite数据库操作方法中获取异常

时间:2014-12-07 17:08:18

标签: android android-sqlite

我在sqlite db操作类中遇到错误。

错误是这样的:java.lang.IllegalStateException:尝试重新打开已经关闭的对象:

我的代码如下:

public void incrementViewCountForShow(String showId){

    SQLiteDatabase db = this.getWritableDatabase();

    showViews(showId);

    String query = "UPDATE " + TABLE_SHOWS + " SET " + COLUMN_SHOW_VIEWS + "=" + COLUMN_SHOW_VIEWS + "+1" + " WHERE " + COLUMN_SHOW_ID + "=" + showId ; 

    db.rawQuery(query, null);

    showViews(showId);

    db.close();

}

private void showViews(String showId){

    boolean isFirst = true;
    StringBuilder strBuilder = new StringBuilder();
    SQLiteDatabase db = this.getReadableDatabase();
    String query = "SELECT " + COLUMN_SHOW_NAME_EN + "," + COLUMN_SHOW_VIEWS + " FROM " + TABLE_SHOWS + " where " + COLUMN_SHOW_ID + "=" + showId;
    Cursor cursor = db.rawQuery(query, null);

    if (cursor != null) {

        while (cursor.moveToNext()) {

            strBuilder.append(cursor.getString(0));

        }
    }

    cursor.close();
    db.close();
}

出现此错误的原因是什么?如何解决这个问题?

**我们不能在同一个方法中做两个操作吗? (从db读取两次)

谢谢

2 个答案:

答案 0 :(得分:2)

db.rawQuery(query, null);仅用于查询(SELECT)。对于命令(INSERT,UPDATE,DELETE,CREATE TABLE,...),请使用db.execSQL(query, null);

然后移除db.close();

中的showViews()

答案 1 :(得分:2)

  

出现此错误的原因是什么?

您在close()多次致电SQLiteDatabase

  

如何解决这个问题?

请勿多次致电close() SQLiteDatabase。实际上,您根本不应在close()上致电SQLiteDatabase。相反,请在close()上致电SQLiteOpenHelper,只有当您使用SQLiteOpenHelper完成 时才会这样做。

另外,正如Der Golem所说,对于不返回结果集的SQL语句,请使用execSQL(),而不是rawQuery()