我有两张桌子专辑和歌曲,每首歌都提到了明矾的身份。
相册表:
CREATE TABLE albums
(id INTEGER PRIMARY KEY ASC,
name TEXT,
additional TEXT)
歌曲表:
CREATE TABLE songs
(id INTEGER PRIMARY KEY ASC,
album_fk INTEGER NOT NULL,
title TEXT,
url TEXT,
duration BIGINT NOT NULL)
我还有一个触发器来检查我删除相册的时间是否有现有的歌曲:
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
这一切都很好,但有时候
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)
我尝试删除相册时会抛出。我的删除方法只是删除id的相册。坏的是我无法重现这个,所以我没有提供太多的信息。 我尝试了删除相册的不同场景,但我从未遇到过此例外。
所以任何想法如何调查此问题。专辑表中没有任何约束因此可能导致此类异常?任何帮助将不胜感激。
答案 0 :(得分:2)
这太不公平了。如果你在PC上运行这个代码一切都很好,如果你试图删除有歌曲的专辑,例外说:专辑有歌曲无法删除“但似乎android家伙没有处理来自sqlite和jsut抛出的正确RAISE异常: android.database.sqlite.SQLiteConstraintException:错误代码19:约束失败。
答案 1 :(得分:2)
我通过将数据库的定义更正为NOT NULL字段来解决这个问题。您必须发送一些数据。
答案 2 :(得分:1)
我在背景中有一些触发器有同样的问题,我终于切换到这个经典选项,它解决了我的问题:
db.rawQuery(“UPDATE table set column = newValue WHERE ...;”,null);
答案 3 :(得分:0)
另请参阅“SQLiteStatement不会传播SQLite触发器中定义的错误消息” http://code.google.com/p/android/issues/detail?id=3296