sqlite数据库文件有时候会出现打不开,提示database disk image is malformed
造成的原因有可能是多线程同时读写,磁盘空间不足,还有就是写入数据过程中突然掉电等。
可以通过导入导出文件的方法恢复
命令行方式:
test.db是原始损坏的数据库文件
首先导出数据
sqlite3 test.db sqlite>.output tmp.sql sqlite>.dump sqlite>.quit
再倒入到一个新库中
sqlite3 testnew.db sqlite>.read test.sql sqlite>.quit
这时新建的testnew.db一般是可以用的,不过有可能testnew.db要比原来的test.db文件要小,应该是有些数据丢了。
或者一条命令
sqlite3 test.db ".dump" | sqlite3 testnew.db
不过之前百度看到有人说这种方式对大数据库文件可能无效,比如说db文件有50M+,可以用SQLite Expert Professional(收费)的进行修复,免费版不行,这个方式没有试过,有需求的可以尝试下