J'avais un fichier sqlite qui était corrompu et qui montrait un symptôme comme celui-ci.
select count(*) from corruptTable;
return:38000;
Mais lorsque j'essaie de charger les enregistrements avec
select * from corruptTable;
Il ne renvoie que 7 enregistrements.
J'ai essayé plusieurs choses, mais ces étapes ont été les plus réussies.
Sur un mac, ouvrez un terminal et exécutez ces commandes sur votre base de données corrompue. (ce sont des commandes sqlite3, donc vous devriez pouvoir utiliser d'autres éditeurs sqlite3 ou des commandes similaires dans d'autres systèmes).
1 sqlite3 dbWithCorruptTable.sqlite (Obviously replace "dbWithCorruptTable" to your sqlite3 file that has the corrupt table)
2 .mode insert
3 .output dump_all.sql
4 .dump
5 .exit
6 Manually edit the dump_all.sql file in a text editor and remove the transaction statements. Usually there is a "BEGIN TRANSACTION" statement on the 2nd line of the file and a "ROLLBACK" statement on the last line. Remove these and save the file
Ces étapes sont tirées de ce site Web : http://www.dosomethinghere.com/2013/02/20/fixing-the-sqlite-error-the-database-disk-image-is-malformed/