android中带有更新的Sqlite触发器

android中带有更新的Sqlite触发器,sqlite,android-sqlite,Sqlite,Android Sqlite,当我尝试实现一个触发器时,该触发器将在插入时更新表。如果表中已有articleId,则articleIsLiked应更改为0,如果没有,则应将articleId和articleIsLiked插入为1。当前,当我进行插入时,每次尝试运行插入查询而不是更新记录时,都会生成一条新记录 CREATE TRIGGER test_update AFTER INSERT ON articlesTable BEGIN INSERT INTO articlesTable ( articleId, artic

当我尝试实现一个触发器时,该触发器将在插入时更新表。如果表中已有articleId,则articleIsLiked应更改为0,如果没有,则应将articleId和articleIsLiked插入为1。当前,当我进行插入时,每次尝试运行插入查询而不是更新记录时,都会生成一条新记录

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;
articlesTable

 id PK 
 articleId int  
 articleIsLiked int

不能使用触发器将插入更改为更新

最简单的方法是在代码中:

db.beginTransaction();
试一试{
ContentValues cv=新的ContentValues();
long c=DatabaseUtils.queryNumEntries(db,“articlesTable”,
“articleId=”+id);
如果(c>0){
cv.put(“Articleislike”,0);
db.update(“articlesTable”,cv,“articleId=“+id,null”);
}否则{
cv.put(“articleId”,id);
cv.put(“Articleislike”,1);
db.插入(“articlesTable”,空,cv);
}
db.setTransactionSuccessful();
}最后{
db.endTransaction();
}

当您确实需要更新时,为什么要运行INSERT?也就是说,当您查看一个新项目并尝试喜欢它时,它应该插入到数据库中,但如果您再次尝试喜欢它,它应该将以前保存的
1
值更改为
0