j'ai deux albums tableaux et chansons et chaque chanson a référence à l'identifiant de l'alun.contrainte sqlite échoué code d'erreur
table Album:
CREATE TABLE albums
(id INTEGER PRIMARY KEY ASC,
name TEXT,
additional TEXT)
table chanson:
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 pour vérifier si je supprime un album s'il y a des chansons qu'il y trouve:
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 très 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 je tente de supprimer un album. Ma méthode de suppression est simplement la suppression d'un album par ID. La mauvaise chose est que je ne peux pas reproduire cela, donc il n'y a pas beaucoup d'informations que je peux fournir. J'ai essayé différents scénarios avec la suppression d'un album mais je n'ai jamais eu cette exception.
donc des idées comment enquêter sur cette question. Il n'y a pas de contraintes dans la table des albums, alors qu'est-ce qui pourrait causer une telle exception? Toute aide serait appréciée.
Tout d'abord, je vous recommande de télécharger le navigateur de base de données SQLite. Ce logiciel offre la possibilité de tester vos requêtes après les avoir exportées de l'émulateur. De cette façon, vous pouvez vérifier s'il y a une erreur. En outre, juste après que vous élevez la fonction, vous avez un; mais il semble couper votre requête dans le middl parce qu'il est suivi d'un où – Sephy
La première fois que vous avez créé votre table, était sans aucune contrainte car il est dans votre poste? Si vous exécutez pour la première fois avec des contraintes, la table sera créée. Ensuite, si vous supprimez la contrainte et re-exécuter votre projet, la table ne sera pas recréé (si vous utilisez seulement getWrtiableDatabase()) et vous aurez l'ancienne version (avec la contrainte). Donc vous devrez d'abord le supprimer. – ccheneson