我有两张表格专辑和歌曲,每首歌都有引用alum的id。sqlite约束失败错误代码
专辑表:
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。坏的一面是,我无法重现这一点,所以没有太多的信息,我可以提供。 我尝试了删除专辑的不同场景,但我从来没有得到这个例外。
所以任何想法如何可以调查这个问题。专辑表中没有任何限制,因此可能会导致此类异常?任何帮助将不胜感激。
首先,我会建议你下载SQLite数据库浏览器。该软件提供了在从模拟器中导出它们之后测试您的查询的可能性。这样你可以检查是否有任何错误。而且,在你提出功能之后,你有一个;但它似乎在middl中减少了您的查询,因为它后面跟着一个 – Sephy 2010-07-30 12:42:57
第一次创建表时,是否没有任何限制,因为它在您的文章中?如果您第一次运行约束条件,将创建表格。然后,如果您删除约束条件并重新运行项目,则表格将不会被重新创建(如果您只是使用getWrtiableDatabase()),并且您将拥有旧版本(带约束条件)。所以你必须先删除它。 – ccheneson 2010-07-30 14:18:50