如何在不出现数据库锁的情况下并行执行线程并插入相应的数据到sqlite数据库中?

4

我需要调用多个API,每个API在单独的线程中执行,并将响应数据插入到SQLite数据库中而不会导致锁定。是否有人能够在这方面提供帮助,给我一个可供参考的工作示例。

1个回答

8
我需要调用多个api,每个api都在单独的线程中执行,并将响应中的相应数据插入到sqlite数据库中,而不会引起锁定。您无需进行任何特殊操作。多个线程可以使用同一SQLiteDatabase对象,而无需在应用程序级别上进行锁定。Sqlite在幕后完成自己的锁定。您永远不应该遇到死锁,但一个线程必须等待另一个线程完成其插入。请参阅这些问题/答案:在Android下,Sqlite是单线程的。即使多个线程使用同一个数据库连接,我的理解是它们也会被阻塞以防止并发运行。没有办法绕过此限制。如果打开两个连接到同一个数据库,这将损坏数据库,因为数据库更新将不协调。

多进程而非线程如何呢?在同时生成多个进程的情况下,我可否使用SQLite来实现这一目的,通过跨进程使用单一连接来实现? - Volatil3
我通过Google @Volatil3找到了这个链接:https://www.sqlite.org/faq.html#:~:text=Multiple%20processes%20can%20have%20the,control%20access%20to%20the%20database. - Gray
那我该如何确保在我生成多个进程的同时不会同时进行插入操作呢? - Volatil3
阅读该页面。Sqlite使用文件锁定,因此一次只能更新一个进程。如果有人正在更新,则没有人可以进行阅读。 - Gray

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接