Android - l'image du disque de base de données est mal formée
Dans mon application android, je suis "base de données d'image de disque est incorrect"
Quelles sont les raisons pour obtenir cette erreur?
pas fermé la db? plusieurs threads accèdent à la db? ou android viens de recevoir endommagé?
Grâce
android.database.sqlite.SQLiteDatabaseCorruptException: database disk image is malformed
android.database.sqlite.SQLiteQuery.native_fill_window(Native Method)
android.database.sqlite.SQLiteQuery.fillWindow(SQLiteQuery.java:75)
android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:288)
android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:269)
android.database.AbstractCursor.moveToPosition(AbstractCursor.java:171)
android.database.AbstractCursor.moveToFirst(AbstractCursor.java:248)
...
source d'informationauteur Daniel Benedykt
Vous devez vous connecter pour publier un commentaire.
J'ai rencontré de nombreux cas de personnes qui déclarent sqlite problèmes de corruption sur Android. La majorité du temps, c'est lié à un tueur de tâches, mais il y a encore une petite marge de gens connaissent encore aléatoire SQLite corruption.
Par exemple, ce problème:
http://code.google.com/p/android/issues/detail?id=4866
JRL les liens ci-dessus sont également très utiles pour comprendre quels types d'événements qui peuvent conduire à une corruption de la DB SQLite image.
Aussi, SQLite lui-même a été corrigée dans l'histoire récente pour résoudre divers (rare), la corruption des données des scénarios. Voir http://www.sqlite.org/changes.html. Donc la version de SQLite qui est livré avec Android n'est pas la dernière, mais comme Android évolue, les applications qui sont regroupés avec elle, comme SQLite.
À la fin de la journée, il ya seulement tellement beaucoup que nous pouvons faire comme les programmeurs, pour se protéger contre SQLite corruption de son parfois avantageux de code mécanismes de sécurité dans nos applications, tels que des périodiques DB sauvegardes sur carte sd (c'est ce que je fais).
L'erreur est transmis à partir du code natif pour Java, de sorte que vous avez à regarder les causes possibles de SQLite à la corruption. Voici une page web sur l'SQLite site web qui répertorie ceux à cause de bogues dans SQLite, et voici un autre intitulé Comment corrompre votre base de données.
Corrigé dans la Version 3.5.4 (2007-12-14):
Toute SUPPRESSION ou mise à JOUR de l'opération qui utilise des effets secondaires pour supprimer des lignes de la table qui est le sujet de la SUPPRESSION ou de mise à JOUR peut causer la corruption de base de données. La question a d'abord été identifié par ticket #2832. Mais la question est très ancienne et les effets de toutes les versions de SQLite, au moins jusqu'à la version 3.3.13 (la version la plus ancienne que nous avons vérifié.)
Un "supprimer l'effet secondaire" dans le paragraphe précédent signifie une suppression qui survient à la suite d'une OU de REMPLACER la clause ou dû à un déclencheur. Par exemple:
Dans l'exemple ci-dessus, le premier cycle de la mise à JOUR provoque le déclenchement de l'incendie et de supprimer la deuxième ligne de l'ex1 table. Lorsque le deuxième cycle de la mise à JOUR de boucle s'exécute, il tente de traiter la deuxième ligne de l'ex1 table. SQLite reconnu que la deuxième ligne a été supprimée, de sorte qu'il abandonne le deuxième cycle, mais il n'était pas de nettoyer après lui-même correctement, ce qui pourrait conduire à la corruption de base de données sur les cycles subséquents de la boucle.