5

我想檢查一個SQLite數據庫是否打開,如果是,我想訪問該服務類中的數據庫。活動和後臺服務訪問SQLite數據庫

我很擔心,並已經看到,多個打開的數據庫調用衝突,並拋出異常。因爲我在「活動」和「服務」類中查詢數據庫,所以我試圖實施此處推薦的解決方案Commonsware:When to close db connection on android? Every time after your operation finished or after your app exit。但是,如果活動可能需要,我不想關閉然後在服務類中打開數據庫。從這個回答Why use SQLiteOpenHelper over SQLiteDatabase?看來,實現SQLiteOpenHelper來解決多次調用的問題似乎是有意義的。

非常感謝你的幫助!

回答

5

這個人凱文是一個傳說:http://touchlabblog.tumblr.com/post/24474750219/single-sqlite-connection。非常感謝。

在那個鏈接分享他可笑的簡單的解決方案:

public class DatabaseHelper extends OrmLiteSqliteOpenHelper { 
private static DatabaseHelper instance; 

    public static synchronized DatabaseHelper getHelper(Context context) 
    { 
     if (instance == null) 
      instance = new DatabaseHelper(context); 

     return instance; 
    } 
    //Other stuff... 
} 

然後在我的SQLite類我改變了我的代碼看起來像這樣:

public BlacklistWordDataSource(Context context) { 
    dbHelper = MySQLiteHelper.getHelper(context); 
} 
+8

這只是一個單獨的代碼,爲什麼要如此着迷呢? –

+1

一個真正的傳說將使用'enum' ... –

+3

真正的傳說並不擔心他(或她)的評論家。無論如何,傳奇仍在繼續:http://kpgalligan.tumblr.com/post/109546839958/single-database-connection。它只是關於該主題的鏈接集合。它不斷出現。 –

-2

at oncreat in the activity put datasource.open(); 然後做任何你想要的東西 和actevity的放月底關閉:

/** Call after close activity */ 
@Override 
protected void onStop() { 
    super.onStop(); 
    //Close dataSource 
    datasource.close(); 
}