2014-06-09 6 views
0

달성하려고 할 때 테이블에 articleId가 이미있는 경우 insertI가 만들어 질 때 테이블을 업데이트 할 트리거가 있습니다. articleIsLiked는 0으로 변경되어야하며 그렇지 않은 경우 articleId와 articleIsLiked를 1에 삽입해야합니다. 현재 삽입을 만들 때 레코드를 업데이트하는 대신 삽입 쿼리를 실행하려고 할 때마다 새 레코드가 만들어집니다.업데이트가있는 안드로이드의 Sqlite 트리거

CREATE TRIGGER test_update 
AFTER INSERT ON articlesTable 
BEGIN 
    INSERT INTO articlesTable (articleId, articleIsLiked) 
     VALUES(NEW.articleId, 1) ON DUPLICATE KEY UPDATE 
     articleIsLiked = 0; 
END; 

당신은 트리거가있는 UPDATE로는 INSERT를 변경할 수 없습니다

id PK 
articleId int 
articleIsLiked int 
+0

왜 당신이 INSERT를 실행합니까? –

+0

새 항목을보고 db에 삽입해야하는 것이 좋지만 다시 원한다면 이전에 저장된 '1'값을 '0'으로 변경해야합니다. – kabuto178

답변

0

articlesTable.

이 작업을 수행하는 가장 쉬운 방법은 코드입니다 : 당신이 실제로 업데이 트를 할 때

db.beginTransaction(); 
try { 
    ContentValues cv = new ContentValues(); 
    long c = DatabaseUtils.queryNumEntries(db, "articlesTable", 
              "articleId = " + id); 
    if (c > 0) { 
     cv.put("articleIsLiked", 0); 
     db.update("articlesTable", cv, ""articleId = " + id, null); 
    } else { 
     cv.put("articleId", id); 
     cv.put("articleIsLiked", 1); 
     db.insert("articlesTable", null, cv); 
    } 
    db.setTransactionSuccessful(); 
} finally { 
    db.endTransaction(); 
} 
관련 문제