我认为这是一个非常简单的问题。但我自己也解决不了。
我有两个申请。
一个人以非常快的速度写入sqlite3数据库 - 大约每秒6个事务块。
另一个应该有时从数据库中读取数据
我该如何设计这两个应用程序?现在,当第一个应用程序正在编写另一个应用程序失败并且错误“数据库被锁定”在我尝试执行的任何一个函数:SQLite3_Open或带有SQLITE_OPEN_READONLY标志的SQLite3_Open_v2。
主要问题是:一个appliocation能够做'SELECT',而另一个appliocation是'INSERT'吗吗?
如果没有我该怎么办?
关闭写入数据库连接,然后打开另一个数据库连接,执行选择,然后关闭它,然后再次打开写连接并继续插入?换句话说,我是否必须“发明”某些机制来控制这些“读取”和“写入”应用程序的separte数据库访问?
如果是,那么是否有可能使用“A”强制关闭applcation的“B”连接
谢谢!
答案 0 :(得分:2)
SQLite可以很好地处理多个进程。使用WAL支持,您甚至可以从一个连接读取数据库,而另一个连接正在写入。每秒六次交易并不多,假设每次交易每次不超过166毫秒。
通常在单步执行语句时返回锁定,而不是在打开数据库时返回。是否可以使用SQLITE_OPEN_EXCLUSIVE
打开第一个连接?这将导致另一个进程无法打开连接。如果是这种情况,请删除该标志。