我在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读取两次)
谢谢
答案 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()
。