我不知道如何正确处理此问题而不会出现数据库锁定错误。
我的应用程序基本上以 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()
我的问题是:
- 解决这种情况的最佳方法是什么?
db.open
考虑到我做了很多写/读操作,调用onCreate 和db.close()
onDestroy()会更好吗?这会比每次我需要访问数据库时调用 open/close 更好吗?- 我需要做些什么来避免读取时数据库锁定?