2

我正在尝试将 SQLite DB 与 AIR 项目一起使用,似乎有一些问题我似乎无法在互联网上找到答案,尤其是有关最佳实践的问题。

  1. 第一个是关于在同一个应用程序实例中有多个连接。某些应用程序进程需要在瞬间使用 db,最好由同步类型代码流 (try{}catch(){}) 提供服务。某些过程可能需要一段时间,最好使用带有 AsyncResponder 的异步代码流来提供服务。

    正因为如此,我考虑过有一个 ConnectionPoolManager,它有多个异步实例和一个同步 SQLConnection 类的实例。这是一个体面的、好的还是绝对残暴的想法?这引出了我的下一个观点。

  2. 是否存在多个异步连接并行运行其异步语句的问题?我见过一些人抱怨数据库被锁定,我读过一次只有一个语句可以执行写入。

    如果一个 write 语句被调用来执行(new Async...)而另一个正忙,会发生什么?会抛出错误,还是会等待超时?

对此问题的任何澄清将不胜感激。我不断遇到那种一次性回答问题但不是我的问题的来源。通常我会自己去测试它,但我担心我可能无法重现只会在更重的使用水平下才会表现出来的陷阱错误。

编辑:这是一些关于我浪费半天后发现的问题的文档。Adobe文档

4

1 回答 1

2

SQLite 没有写并发;作家将阻止所有其他读者和作家。

当发生这种冲突时,SQLError将抛出一个 ID 为 3119 的事件。在这种情况下,应用程序应该等待并重试。SQLite 有一个内置的设置来自动执行这样的等待,但是 Air 并没有暴露这一点。您必须在代码中手动执行此操作,这并不容易

因此,与 SQLite 建立单一连接会更容易。如果您想异步使用它,则必须使用Mutex.

于 2012-10-18T08:26:10.137 回答