我正在为我的Android应用程序使用SOA架构。我在后台持续运行服务(每1分钟后)从我的MYSQL数据库获取数据并将其与我的SQLite数据库同步(如果2个数据库中有任何更改)。
现在,当服务在后台运行时,它会打开SQLite。同时,如果我正在处理(使用)应用程序,它还会尝试打开Sqlite来获取数据。在这种情况下,我收到一个名为的错误:数据库被锁定在android.database.SQLiteOpenHelper.getReadableDatabase。
有人可以建议我在这种情况下可以做些什么吗?
答案 0 :(得分:2)
答案 1 :(得分:1)
您需要在应用和后台服务之间共享单个数据库连接。这将正确序列化对数据库的所有访问。
答案 2 :(得分:0)
SQlite是一个基于文件的数据库,一次只允许访问一个应用程序。
您必须将服务与应用程序同步,所以 该服务为应用程序提供了一些时间来获取新数据(有 这方面有很多解决方案;寻找信号量,监视器和循环)。
您使用第二个服务,它将从您的数据库获取对数据库的I / O请求 服务和应用程序,对它们进行排队,执行请求的I / O并返回任何结果 提交请求的应用程序或服务。
答案 3 :(得分:0)
事实并非如此,SQLite 3支持多个连接,您可以将它们保持打开状态。只需确保在更新线程中使用事务并尽快关闭它。
在http://www.sqlite.org/lockingv3.html
中了解详情如果你使用python,你可以使用例如在连接到db时设置timeout
参数,这将确保阅读器线程在放弃之前等待超时秒。因此,使更新器尽可能紧凑是很重要的,这样读者就不会超时。
http://docs.python.org/library/sqlite3.html
另外,如果您想了解更多信息,我会深深推荐以下书籍。 SQLite权威指南:http://www.apress.com/9781590596739