2014-12-07 22 views
-1

我在我的sqlite数据库操作类中出现错误。在android中的sqlite数据库操作方法中得到一个异常

的错误是这样的: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(); 
} 

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

**我们不能用同样的方法做两个操作吗? (从分贝读两次)

由于

回答

2

,这是什么错误的原因是什么?

您在SQLiteDatabase上多次致电close()

如何解决这个问题?

请勿多次拨打SQLiteDatabase上的close()。事实上,你不应该在SQLiteDatabase上拨打close()。相反,拨打电话close()SQLiteOpenHelper,只有当你是完成SQLiteOpenHelper

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

+0

感谢您的快速回复。我创建了数据库并在同一个类中实现了所有的数据库访问方法。在android中使用sqlite数据库的最佳方式是什么? – chathura 2014-12-07 17:16:02

+0

@ chathura2020:没有单一的“最佳”方式。但是不要关闭你的'SQLiteOpenHelper'(和因此它的'SQLiteDatabase'),直到完全完成它。 – CommonsWare 2014-12-07 17:18:26

2

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

,并删除了db.close();线showViews()

相关问题