안드로이드 개발 질문/답변
(글 수 45,052)
현재 책도없이 안드로이드 개발 혼자 맨땅에 헤딩하고 있는데요.
안드로이드 데이터베이스를 가지고 어플하나 만들고 있는데요..
sqlite3 은 foreign key를 지원안한다고 해서 trigger를 쓰려고 하는데요..
아무리 자료를 찾아봐도 trigger 자체에 대한건 나오는데 이걸 안드로이드 코드에 어떻게 적용시키는지
예제가 없더라구요...
아니면 SQLiteDataBase 클래스 안에 markTableSyncable 라는 메소드가 있던데.. 메소드 설명보니까
테이블간 싱크를 맞춰서 하는거 같더라구요. 이걸써야 하는지...방법을 모르겠네요.
제가 하려는게 a테이블, b테이블이 있으면 b테이블은 a테이블의 id 컬럼만을 가지고 있다가
a 테이블에서 한 레코드가 지워지면 그 레코드의 id를 가지고있는 b테이블의 레코드도 저절로 지워지게
만드려고 합니다...고수분들 아시면 제발 답변 부탁드려요~!
안드로이드 데이터베이스를 가지고 어플하나 만들고 있는데요..
sqlite3 은 foreign key를 지원안한다고 해서 trigger를 쓰려고 하는데요..
아무리 자료를 찾아봐도 trigger 자체에 대한건 나오는데 이걸 안드로이드 코드에 어떻게 적용시키는지
예제가 없더라구요...
아니면 SQLiteDataBase 클래스 안에 markTableSyncable 라는 메소드가 있던데.. 메소드 설명보니까
테이블간 싱크를 맞춰서 하는거 같더라구요. 이걸써야 하는지...방법을 모르겠네요.
제가 하려는게 a테이블, b테이블이 있으면 b테이블은 a테이블의 id 컬럼만을 가지고 있다가
a 테이블에서 한 레코드가 지워지면 그 레코드의 id를 가지고있는 b테이블의 레코드도 저절로 지워지게
만드려고 합니다...고수분들 아시면 제발 답변 부탁드려요~!
2010.01.29 14:45:28
String createTrigger = "create trigger fk_delete_word before delete on word for each row begin delete from a where wordID = old._id end;";
mDb.execSQL(createTrigger);
mDb.execSQL(createTrigger);
제가 계속 이렇게 썼는데 에러가 나요..ㅜㅜ 답변주신거 보니까 맞는거 같은데...흐미..
2010.01.29 14:51:39
오류 스크립트좀 볼 수 있을까요?
도움되실까 싶어서 링크하나 걸어봅니다
Link Site : http://code.google.com/p/android-tabletop/wiki/DbPresentation
도움되실까 싶어서 링크하나 걸어봅니다
Link Site : http://code.google.com/p/android-tabletop/wiki/DbPresentation
2010.01.29 15:29:30
01-29 06:27:22.431: ERROR/Database(226): Failure 1 (near "end": syntax error) on 0x303868 when preparing 'create trigger fk_delete_word before delete on word for each row begin delete from a where wordID = old._id end;'.
원하시는 Delete 관련된 내용은 아니지만 유추 해보실 수 있지않을까 싶어서 Sample 올려 봅니다
소스내용은 책에 반드시 유효한 저자가 존재함을 강제로 트리거를 생성하는 SQL 문 입니다...
private static final string CREATE_TRIGGER_ADD =
"CREATE TRIGGER fk_insert_book BEFORE INSERT ON tbl_books
FOR EACH ROW
BEGIN
SELECT RAISE(ROLLBACK, 'insert on table \"tbl_books"\ violates foreign key
constraint \"fk_authorid\"') WHERE (SELECT id FROM tbl_authors WHERE ID = NEW.authoid) IS NULL;
END;:;
이 CREATE TRIGGER 명령문 역시 execSQL()로 실행합니다
mDatabase.execSQL(CREATE_TRIGGER_ADD)
이상이고 참 저 고수 아닌데 답변(?)달아도 되는지 모르겠내요 ^^