2014-12-07 30 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()

相關問題