Попробуйте использовать один SqliteDatabaseHelper и сделать его единственным экземпляром. После этого не закрывайте экземпляр SqliteDatabase после завершения ваших операций .
Вы можете реализовать блокировку базы данных, чтобы увидеть это
http://www.sqlite.org/lockingv3.html
Когда вы запускаете операцию с базой данных, которая имеет много одновременных операций, вы должны использовать
database.beginTransaction(); /* for start transaction */
и после завершения операции над базой данных вы можете использовать
database.setTransactionSuccessful();
database.endTransaction();
Но если вы допустите ошибку между транзакциями, не устанавливайте database.setTransactionSuccessful();
, чтобы транзакция имела откат.
Также вы можете проверить в момент ошибки, находится ли база данных в транзакции или нет, с помощью database.inTransaction();
, если она вернет true, тогда вы в транзакции, иначе вы не в транзакции
Также Вы можете проверить, заблокирована или нет текущая база данных, вызвав
database.isDbLockedByCurrentThread();
database.isDbLockedByOtherThreads();
это вернет логическое значение.
Также вы можете установить, хотите ли вы заблокировать вашу базу данных, если несколько потоков пытаются одновременно прочитать и записать вашу базу данных,
database.setLockingEnabled(boolean);
Вышеуказанные удаленные методы устарели, поэтому не используйте их.