我每次都犯这个错误。我该如何解决这个问题。我得到了这个错误霍尼韦尔EDA 51 K设备.android.database.sqlite.SQLiteDiskIOException:磁盘I/O错误(代码522 SQLITE_IOERR_SHORT_READ)正在尝试解决android.database.sqlite.SQLiteDiskIOException的此错误:磁盘I/O错误(代码522 SQLITE_IOERR_SHORT_READ)任何人帮助这个。
7lrncoxx1#
我该如何解决这个问题。你真的需要看看实际设备上发生了什么。毫无疑问,特定于该设备的操作系统的消息是由于VFS(虚拟文件系统),这基本上是操作系统,无法读取所请求的字节数。根据**(522)SQLITE_IOERR_SHORT_READ**如果你有权限/能力从android studio在实际设备上运行应用程序,你可能会有一些运气,通过添加断点和在调试模式下运行来确定发生了什么。此外,尽管可能相当复杂,但您可以打开记录VFS调用消息的vfstrace。参见https://www.sqlite.org/vfs.html可能值得研究的一件事是实际的数据库文件。如果您可以从有问题的设备复制数据库(同样,如果您能够在Android Studio中连接/使用设备,则可以)。然后,您可以在SQLite工具中打开实际的数据库文件,这样做可能会导致相同的问题。如果是这样的话,也许罪魁祸首是默认情况下,后来的Android版本使用WAL(写前日志记录),在这种情况下,如果WAL文件没有复制,那么短读可能是WAL文件(数据库文件后缀为-wal)包含尚未写入实际/主数据库文件的数据库部分的结果。如果是这样,那么您可能允许应用程序备份和恢复数据库文件,但没有备份-wal文件,因此只能部分恢复数据库。可能设备在故障时已经耗尽了可用存储器,因此短读取是存储器不足以执行读取的结果。
1条答案
按热度按时间7lrncoxx1#
我该如何解决这个问题。
你真的需要看看实际设备上发生了什么。毫无疑问,特定于该设备的操作系统的消息是由于VFS(虚拟文件系统),这基本上是操作系统,无法读取所请求的字节数。
根据**(522)SQLITE_IOERR_SHORT_READ**
如果你有权限/能力从android studio在实际设备上运行应用程序,你可能会有一些运气,通过添加断点和在调试模式下运行来确定发生了什么。
此外,尽管可能相当复杂,但您可以打开记录VFS调用消息的vfstrace。参见https://www.sqlite.org/vfs.html
可能值得研究的一件事是实际的数据库文件。如果您可以从有问题的设备复制数据库(同样,如果您能够在Android Studio中连接/使用设备,则可以)。然后,您可以在SQLite工具中打开实际的数据库文件,这样做可能会导致相同的问题。如果是这样的话,也许罪魁祸首是默认情况下,后来的Android版本使用WAL(写前日志记录),在这种情况下,如果WAL文件没有复制,那么短读可能是WAL文件(数据库文件后缀为-wal)包含尚未写入实际/主数据库文件的数据库部分的结果。
如果是这样,那么您可能允许应用程序备份和恢复数据库文件,但没有备份-wal文件,因此只能部分恢复数据库。
可能设备在故障时已经耗尽了可用存储器,因此短读取是存储器不足以执行读取的结果。