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.

Tout d'abord, je vous recommande de télécharger la base de données SQLite browser. Ce logiciel offre la possibilité de tester vos requêtes après leur exportation à partir de l'émulateur. De cette façon, vous pouvez vérifier si il y a une erreur. Par ailleurs, juste après que vous soulevez fonction, vous avez un ; mais il semble couper votre requête dans le middl parce qu'il est suivi par un où
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