我有兩張表格專輯和歌曲,每首歌都有引用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