sqlite contrainte a échoué code d'erreur
J'ai deux tables des albums et des morceaux, et chaque morceau a référence à l'alun de l'id.
Album de table :
CREATE TABLE albums
(id INTEGER PRIMARY KEY ASC,
name TEXT,
additional TEXT)
Chanson de table:
CREATE TABLE songs
(id INTEGER PRIMARY KEY ASC,
album_fk INTEGER NOT NULL,
title TEXT,
url TEXT,
duration BIGINT NOT NULL)
et j'ai aussi un déclencheur à vérifier quand je supprime un album si il y a des chansons :
CREATE TRIGGER trigger_on_delete
BEFORE DELETE ON albums
FOR EACH ROW BEGIN
SELECT RAISE(FAIL,'album has songs cannot be deleted')
WHERE (SELECT album_fk FROM songs WHERE album_fk = OLD.id) IS NOT
NULL;)
END
tout cela fonctionne bien, mais parfois
Exception: android.database.sqlite.SQLiteConstraintException: error
code 19: constraint failed
Stack Trace :
android.database.sqlite.SQLiteStatement.native_execute(Native Method)
android.database.sqlite.SQLiteStatement.execute(SQLiteStatement.java:
66)
est levée lorsque j'essaie de supprimer un album. Ma méthode de suppression est tout simplement la suppression d'un album par id.La mauvaise chose est que je ne peux pas reproduire ce donc, il n'y a pas beaucoup d'infos que je peux fournir.
J'ai essayé différents scénarios avec de la suppression d'un album, mais je n'ai jamais eu cette exception.
Ainsi, toutes les idées comment peut étudier cette question. Il n'ya pas de contraintes dans l'album de table afin de ce qui a pu provoquer une telle exception ? Toute aide sera appréciée.
La première fois que vous avez créé votre table , c'était sans contraintes comme il est dans votre post? Si vous exécutez pour la première fois avec des contraintes, la table sera créée. Ensuite, si vous supprimer la contrainte et de ré-exécution de votre projet, la table ne sera pas recréé (si vous utilisez simplement getWrtiableDatabase()) et vous, vous avez l'ancienne version (avec contrainte). Donc, vous devrez la supprimer en premier.
OriginalL'auteur Mojo Risin | 2010-07-30
Vous devez vous connecter pour publier un commentaire.
C'est tellement pas juste. Si vous exécutez ce code sur PC tout est OK et si vous essayez de supprimer l'album qui a des chansons de l'exception dit :l'album a des chansons ne peuvent pas être supprimés" mais il semble que android les gars ne gère pas les corriger LEVER de sqlite et simplement jeter l'Exception: android.la base de données.sqlite.SQLiteConstraintException: erreur code 19: contrainte échoué.
OriginalL'auteur Mojo Risin
J'ai résolu ce problème en modifiant la définition de ma base de données dans un champ qui n'est PAS NULL. Vous devez envoyer des données.
OriginalL'auteur julian velazquez
J'ai eu le même problème avec certains déclencheurs dans le fond, j'ai finalement opté pour ce classique de l'option et il a fixé mon problème:
db.rawQuery("UPDATE table set colonne = newValue OÙ ... ;", null);
OriginalL'auteur Youyougoslave
Voir aussi "SQLiteStatement ne pas propager les messages d'erreur défini dans SQLite déclencheurs"
http://code.google.com/p/android/issues/detail?id=3296
OriginalL'auteur MikeW