刚开始收到AIR SQLite错误3182磁盘I / O错误

时间:2012-10-31 03:55:26

标签: sqlite air

我们的软件的新测试版有一些变化,但不是我们的数据库层。

我们刚刚开始在服务器日志中报告错误3128。它似乎一旦发生,只要应用程序打开就会发生。代码中最明显的部分是我们每秒通过SQLite记录数据的位置。仅在本月,我们就在服务器上生成了47k错误。

3128     Disk I/O error occurred.   Indicates that an operation could not be completed because of a disk I/O error. This can happen if the runtime is attempting to delete a temporary file and another program (such as a virus protection application) is holding a lock on the file. This can also happen if the runtime is attempting to write data to a file and the data can't be written.  

我不知道是什么原因造成了这个错误。也许是一个反病毒程序?也许我们的应用程序变得困惑并且彼此之间写入数据?我们正在使用异步连接。

它造成了很多问题,我们不知所措。它发生在我们的旧版本中,但可能在一个月内完成100次而不是47,000次。无论哪种方式,我都想让它发生“0”次。

2 个答案:

答案 0 :(得分:0)

可能的解决方案:Exception Message: Some kind of disk I/O error occurred

摘要:数据库可能没有问题,但在打开数据库后创建(或删除)临时文件时出现问题。 AIR可能拥有数据库的权限,但不能创建或删除目录中的文件。

  

对我有用的一个答案是使用 PRAGMA 语句将 journal_mode 值设置为以外的值DELETE 即可。您可以通过发出 PRAGMA 语句来执行此操作,方法与发出查询语句的方式相同。

PRAGMA journal_mode = OFF

不幸的是,如果在设置了OFF日记模式时应用程序在事务中间崩溃,那么数据库文件很可能会损坏。 1

1 http://www.sqlite.org/pragma.html#pragma_journal_mode

答案 1 :(得分:0)

解决方案是通过包装一个小包装来确保数据库删除,更新,插入只发生一次。最重要的是,我们必须注意错误3128并重试。我认为这是因为我们有一个触发器运行,可以在我们插入数据后锁定数据库。