두 개의 테이블 앨범과 노래가 있으며 각 노래에는 명반의 ID가 들어 있습니다.sqlite 제약 조건 오류 코드
앨범 테이블 :
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
: 나는 또한 기존 노래가있는 경우 내가 앨범을 삭제할 때 확인하는 트리거가
CREATE TABLE songs
(id INTEGER PRIMARY KEY ASC,
album_fk INTEGER NOT NULL,
title TEXT,
url TEXT,
duration BIGINT NOT NULL)
과 :
CREATE TABLE albums
(id INTEGER PRIMARY KEY ASC,
name TEXT,
additional TEXT)
노래 테이블
이 모든 것이 정상적으로 작동하지만 때로는
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 데이터베이스 브라우저를 다운로드하는 것이 좋습니다. 이 소프트웨어는 에뮬레이터에서 쿼리를 내 보낸 후 쿼리를 테스트 할 수있는 기능을 제공합니다. 이렇게하면 오류가 있는지 확인할 수 있습니다. 게다가, 함수를 생성 한 직후에, 당신은; 하지만 그것은 당신이 당신의 테이블에 처음으로 만들었을 때 – Sephy
당신의 게시물에있는 그대로 제약이 없었나요? 제약 조건을 가지고 처음으로 실행하면 테이블이 생성됩니다. 그런 다음 제약 조건을 제거하고 프로젝트를 다시 실행하면 테이블이 다시 작성되지 않습니다 (getWrtiableDatabase() 만 사용하는 경우). 이전 버전 (제약 조건 포함)을 갖게됩니다. 따라서 먼저 삭제해야합니다. – ccheneson