Mojo Risin
Mojo Risin

Reputation: 8142

sqlite constraint failed error code

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

Answers (4)

julian velazquez
julian velazquez

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

Youyougoslave
Youyougoslave

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

MikeW
MikeW

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

Mojo Risin
Mojo Risin

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

Related Questions