我不知道如何正確處理這個沒有得到數據庫鎖定錯誤。Android sqlite插入/從多個線程多次讀取
我的應用程序基本上以100行(〜60.000項)批量下載許多項目並將它們插入到數據庫中。每批100行都被處理成一個交易。 主要活動允許用戶在記錄下載和插入時在屏幕(片段)之間導航。大多數其他屏幕包含從數據庫讀取的數據。閱讀期間,我收到了很多數據庫鎖定錯誤。所有的讀數都在不同的異步任務
到目前爲止,我只是用「經典方法」
public class DBAdapter {
public DBAdapter(Context ctx) {
this.context = ctx;
DBHelper = new DatabaseHelper(context);
}
private static class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DB_CREATE_TABLES);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Utils.log("Upgrading database from version " + oldVersion + " to " + newVersion + ", which will destroy all old data");
onCreate(db);
}
public DBAdapter open() throws SQLException {
database = DBHelper.getWritableDatabase();
return this;
}
public void close() {
DBHelper.close();
}
然後在我的活動的onCreate()我叫db = new DBAdapter(context);
每一次的主要活動(不片段)完成我在做一個數據庫操作(讀/寫)我叫db.open()
和插入/讀取完成後,我打電話db.close()
我的問題是:
- 這種情況最好的辦法是什麼?
- 考慮到我做了大量的寫入/讀取,onDestroy()上的onCreate和
db.close()
調用db.open
會更好嗎?這會比每次需要訪問數據庫時打開/關閉都好嗎? - 我需要做什麼來避免數據庫在讀取時鎖定?