方法一:
使用第三方软件 sqlite expert (http://www.sqliteexpert.com/),打开数据库有一个 repair 按键;
方法二:
使用sqlite3.exe 修复;
执行命令行命令,将你的数据库中的数据导出为sql语句文件
sqlite3 my.db
sqlite>.output tmp.sql
sqlite>.dump
sqlite>.quit
最后导入到一个新库中
sqlite3 mynew.db
sqlite>.read tmp.sql
sqlite>.quit
编程内可用的修复方法:
cmd执行命令行
//检测数据库是否损坏,如果没有损坏会输出ok
sqlite3.exe clientGK2.db "PRAGMA integrity_check"
//导出旧库sql
sqlite3.exe clientGK.db .dump > tmp.sql
//创建新库
sqlite3.exe clientGK2.db ".read tmp.sql"
Qt下使用QProcess修复sqlite:
QString cmd_1 = QString("sqlite3 %1 \"PRAGMA integrity_check\" \n\r").arg(m_DBFilePath);
QString cmd_2 = QString("sqlite3 %1 .dump > tmp.sql \n\r").arg(m_DBFilePath);
QString cmd_3 = QString("sqlite3 %1 \".read tmp.sql\" \n\r").arg(m_NewDBFilePath);
QProcess process(this);
process.start("cmd.exe");
process.write (cmd_1.toLatin1());
process.write (cmd_2.toLatin1());
process.write (cmd_3.toLatin1());
process.write ("exit \n\r");
process.waitForFinished();//写完以后记得等待进程退出
process.close();