我正在尝试将 SQLite DB 与 AIR 项目一起使用,但似乎有一些问题我无法在互联网上找到答案,尤其是有关最佳实践的问题。
第一个是关于在同一应用程序实例中拥有多个连接。某些应用程序进程需要瞬间使用数据库,最好由同步类型代码流 (try{}catch(){}) 提供服务。有些进程可能需要一段时间,并且通过带有 AsyncResponder 的异步代码流会更好。
因此,我考虑过拥有一个 ConnectionPoolManager,它具有多个异步实例和一个同步 SQLConnection 类实例。这是一个体面的、好的主意还是绝对残暴的主意?这引出了我的下一点。
让多个异步连接并行运行其异步语句是否存在任何问题?我看到有些人提示数据库被锁定,并且我读到一次只能有一个语句可以执行写入操作。
如果一个写语句被调用来执行(new Async...)而另一个写语句正忙,会发生什么?会抛出错误,还是会等待超时?
任何有关此问题的澄清将不胜感激。我不断遇到一些资料来回答一次性问题,但不是特别回答我的问题。通常我会自己去测试,但我担心我可能无法重现只有在较高使用级别时才会出现的陷阱错误。
编辑:这是一些有关我浪费半天时间后发现的问题的文档。 Adobe Doc
最佳答案
SQLite没有写并发;作者将阻止所有其他读者和作者。
当发生此类冲突时,将抛出 ID 为 3119 的 SQLError
。在这种情况下,应用程序应该等待并重试。 SQLite 有一个内置设置可以自动执行此类等待,但 Air 并未公开此设置。您必须在代码中手动执行此操作,is not easy .
因此,与 SQLite 建立单一连接会更容易。
如果您想异步使用它,则必须使用互斥体
来管理访问。
关于sqlite - Adobe Air SQLite 误解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12944145/