Reputation: 8142
I have two tables albums and songs and each song has reference to alum's id.
Album table :
CREATE TABLE albums
(id INTEGER PRIMARY KEY ASC,
name TEXT,
additional TEXT)
Song table:
CREATE TABLE songs
(id INTEGER PRIMARY KEY ASC,
album_fk INTEGER NOT NULL,
title TEXT,
url TEXT,
duration BIGINT NOT NULL)
and i also have a trigger to check when i delete an album if there are existing songs in it :
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
all this is working fine but sometimes
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)
is thrown when i try to delete an album. My delete method is simply deleting an album by id.The bad thing is that i can't reproduce this so there is no much info i can provide. I tried different scenarios with deleting an album but i never got this exception.
So any ideas how can investigate this issue. There are not any contraints in album table so what could cause such exception ? Any help will be appreciated.
Upvotes: 4
Views: 22200
Reputation: 21
I solved this by correcting the definition of my database to a field that is NOT NULL. You must send some data.
Upvotes: 2
Reputation: 551
I had the same problem with some triggers in the backgroung, I finally switched to this classic option and it fixed my problem:
db.rawQuery("UPDATE table set column = newValue WHERE ... ;", null);
Upvotes: 1
Reputation: 41
See also "SQLiteStatement does not propagate error messages defined in SQLite triggers" http://code.google.com/p/android/issues/detail?id=3296
Upvotes: 0
Reputation: 8142
This is so not fair. If you run this code on PC everything is OK and if you try to delete album that has songs the exception says :album has songs cannot be deleted" but it seems that android guys don't handle correct RAISE from sqlite and jsut throw Exception: android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed.
Upvotes: 2