经过一些搜索和体验后,我知道可以通过以下方式使用sqlite3.exe恢复损坏的sqlite3数据库:
.mode insert
.out xxx.sql
select * from target_table;
我的问题是我不知道如何在与sqlite3.c链接的应用程序中使用C代码完成此过程。
关于sqlite3的一些知识,我知道如下:
sqlite3_exec(*db, "select * from target_table;", NULL, 0, &zErrMsg);
但是以下方法不起作用:
sqlite3_exec(*db, ".mode insert", NULL, 0, &zErrMsg);
答案 0 :(得分:0)
以点开头的命令不是SQL语句,也不是SQLite库的一部分;它们由sqlite3
命令行shell实现。
如果您真的想要这样做,请从SQLite的shell.c
复制该代码。
请注意,此算法无法保证恢复损坏的数据库。 它只是从表中读取而不使用任何索引,因此仅当损坏限制在某个索引时才有效。
如果可以自动恢复,SQLite已经这样做而不是返回错误。