android - Android中使用sqlite事务时的多线程问题

标签 android sqlite android-sqlite

我在 Android 中使用 sqlite 事务:

SQLiteDatabase database = sqlite_helper.getWritableDatabase();

database.beginTransaction();
...
database.setTransactionSuccessful();
database.endTransaction();

我的问题是:
1. endTransaction()是否应该放在finally代码块中,如下所示:

try {
    database.beginTransaction();
    ...
    database.setTransactionSuccessful();
}
finally {
    database.endTransaction();
}

如果在数据库操作过程中出现异常,数据库会自动回滚而不用finally吗?

  1. 事务未结束时,其他线程是否可以读写同一个数据库?我听说 Android 中的 sqlite 是线程安全的,但我不确定。我猜在交易过程中会出现一些问题。如果另一个线程使用相同的连接写入相同的数据库,是否会引发错误?
    我曾经在我的应用程序中发现过这个错误,但我不知道它是否与线程安全问题有关:

android.database.sqlite.SQLiteMisuseException:库例程调用顺序不对:

,编译时

有人帮我回答这些问题吗?非常感谢!

最佳答案

1.你应该总是把 endTransaction 放在 finally block 中

2.SQLite 中的事务是线程安全的,参见文档http://www.sqlite.org/atomiccommit.html

关于android - Android中使用sqlite事务时的多线程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13062680/

相关文章:

java - Android 应用程序图标和名称在应用程序中多次出现

android - 如何在 Android Studio 3.5.2 中从 RecyclerView.ViewHolder(itemView) 获取 Activity?

python - SQLite3 选择过去 24 小时内插入到 Flask 中的条目

java - 从 SQLite 列添加数据

java - close() 从未在 android sqlite 中收到数据库异常时显式调用

android - View 相互堆叠的列表

android - 是否可以使用 MotionLayout 将不同的持续时间应用于 ConstraintSet 中的不同约束?

sqlite - CMake的链接器错误

android - 在 android 中更新 SQLite 表的问题

java - 使两列在sqlite中唯一