【问题标题】:Multiple connections to SQLite with simultaneous async Tasks与同时异步任务的多个 SQLite 连接
【发布时间】:2015-07-15 12:00:05
【问题描述】:

在我的场景中,它有 Sync_Class 与后台的 AsyncTasks 同步,从我的应用程序到我的服务器。 每次我的应用程序执行一个需要从我的 SQLite 更改数据的操作时,作为第一步,我的应用程序会更新我的本地数据库,因为第二步会在后台引发 AsyncTask 以开始与我的服务器同步。在 80% 的情况下,我的应用程序运行良好,但其他 20% 的情况下抛出 IllegalStateException,因为应用程序尝试重新打开连接或打开关闭的连接,而我有一种方法可以在上面 6 行以上打开数据库。在这种情况下,我认为问题在于数据库中的多个同时访问,我是对的吗?

在我可以阅读的不同帖子中,人们谈论 de SQLite 无法执行同时连接并且它序列化连接,因为文件结构不允许...最后一个问题是,如果我们使用 sqlite 连接执行多个 asyncTasks进行插入、更新和删除,通过并行编程利用处理器的全部功能,我们有什么工具可以做到这一点?或者这是一个不可行的选择,我们需要进行序列化连接?

如果您对我的问题有任何解决方案或任何想法,请帮助我!提前致谢!!


更多信息: 我的 BDDclass 有一个打开数据库的方法。当我需要在一个简单的函数或 void 中执行查询、原始查询等时,我调用我的数据库类,打开数据库,执行查询或多个查询,最后我们关闭数据库。当我知道在这种情况下我有一个带有查询的多个函数的大型进程时,我创建 BDDclass 并在开始时打开 bdd,最后关闭此进程的数据库。

我这样说是因为我可以看到一些人们推荐使用 SQLiteHelper 的帖子,因为这有助于在 SQLite 中管理多个同时连接,但其他帖子说有同样的问题...然后必须使用 SQLiteHelper ?还是不行?

如果您需要更多信息或其他信息,请告诉我。

【问题讨论】:

  • 你不需要每次都打开和关闭你的数据库,你可以让它保持打开状态。我认为您可能对并发访问是正确的,但不能 100% 确定。这些真的是长期运行的操作吗?如果只是一秒钟左右(或更短),那么设置你的助手类(我认为这不是必需的,但非常方便)以进行同步访问可能还不错。
  • 视情况而定!!这是我的同步类取决于我需要发送的信息量,设备可能在 2 天内不同步,然后我们有更多信息......那么永远不要关闭数据库是个好选择?我可以获得现有的数据库连接吗?

标签: android sqlite android-asynctask parallel-processing


【解决方案1】:

终于解决了问题!!问题是我尝试控制对数据库的访问,当我需要使用并行编程(后台异步任务)读取或写入数据库时​​打开和关闭数据库。 必须记住我不使用 SQLiteHelper 并且我解决了每个活动调用我的数据库类一次的问题,这意味着当我的应用程序暂停时打开我的数据库并关闭它,当我的应用程序进入第一个平面时与 BDD 重新连接其他time 然后连接到我的数据库。

在简历中,永远不要关闭数据库,您可以在 SQLite 中使用具有多个访问权限的并行编程。问候!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2020-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多