Я пытаюсь использовать многопоточность одной базы данных sqlite на Android.У меня следующая ситуация:
Действие A: у него есть 10 потоков, которые используют БД, но использует только одну базу данных SQLite
Действие B: имеет 10 потоков, которые используют БД, но использует только одну базу данных SQLiteDatabase
(два объекта SQLiteDatabase разных операций различаются)
Логическое выполнение следующее:
- A вызывает B
- B вставляет вбаза данных и возвращается к A
- A отображает результат
- Попытка стереть то, что B вставлено, но не удается.
A может стереть старые вещи, но новоеобъекты, которые B только что вставил, потерпят неудачу, если я перезапущу приложение, A сможет стереть объекты, которые раньше не могли.Должен ли я использовать одну и ту же базу данных SQLiteDatabase для двух операций, и если это так, как передать этот объект в операцию B?
Код потока операции A:
закрытый класс Delete_Task extends AsyncTask {
private Context mContext;
private DatabaseManager mDB;
public DeleteEvent_Task(Context mContext,DatabaseManager DB) {
this.mContext = mContext;
this.mDB = DB;
}
@Override
protected Void doInBackground(Long... params) {
long id = params[0];
this.mDB.delete(id);
return null;
}
}
Код потока действия B:
закрытый класс Update_Task расширяет AsyncTask {
private Context mContext;
public Update_Task(Context mContext)
{
this.mContext = mContext;
}
@Override
protected Void doInBackground(Event... params) {
Object e = params[0];
DatabaseManager DB = new DatabaseManager(this.mContext);
if (e.getId() <= 0)
{
DB.add(e);
}
else
{
DB.update(e.getId(), e);
}
DB.close();
return null;
}
}