在Android中使用sqlite事务时出现多个线程问题

fly*_*pen 2 sqlite android android-sqlite

我在Android中使用sqlite事务:

SQLiteDatabase database = sqlite_helper.getWritableDatabase();

database.beginTransaction();
...
database.setTransactionSuccessful();
database.endTransaction();
Run Code Online (Sandbox Code Playgroud)

我的问题是:
1.我应该endTransaction()像这样放在finally代码块中:

try {
    database.beginTransaction();
    ...
    database.setTransactionSuccessful();
}
finally {
    database.endTransaction();
}
Run Code Online (Sandbox Code Playgroud)

如果在数据库操作期间出现异常,数据库是否会自动回滚而不使用"finally"?

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

android.database.sqlite.SQLiteMisuseException: library routine called out of sequence:

,编译时

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

小智 5

1.你应该总是将endTransaction置于finally块中

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