2016-09-22 97 views
0

所以我有一个MySQL数据库的作品与此触发SQLite触发器插入错误

delimiter $$ 
create trigger update_memberID 
after update on memberdata 
for each row 
Begin 
if not (new.visits <=> old.visits) then 
    insert into membervisit (memberID) values (new.memberID); 
    end if; 
if not (new.memberID <=> old.memberID) then 
update membervisit set memberID = new.memberID where memberID =  old.memberID; 
    end if; 
end$$ 
delimiter ; 

现在我想安装在SQLite和一切同一个数据库,但是这个触发器工作。我有一个SQLite的触发器的代码是

"CREATE TRIGGER IF NOT EXISTS `membership.update_memberID` " + 
" AFTER UPDATE " + 
" ON memberdata " + 
" FOR EACH ROW BEGIN " +  
" SELECT CASE WHEN (new.visits <= old.visits) THEN " + 
    " INSERT INTO 'membership.membervisit' ('memberID') values (new.memberID);" + 
      "END;\n" + 

" SELECT CASE WHEN (new.memberID <= old.memberID) THEN " + 
    "UPDATE `membership.membervisit` SET `memberID` = `new.memberID` WHERE `memberID` =`old.memberID`;" + 
      "END;" + 
"END;" 

我收到的错误是

Exception in thread "main" java.sql.SQLException: near "INSERT": syntax error 
    at org.sqlite.core.NativeDB.throwex(NativeDB.java:397) 
    at org.sqlite.core.NativeDB._exec(Native Method) 
    at org.sqlite.jdbc3.JDBC3Statement.executeUpdate(JDBC3Statement.java:116) 
    at SQLiteSetup.main(SQLiteSetup.java:62) 
C:\Users\Owner\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1 
BUILD FAILED (total time: 0 seconds) 

它指的镶齿是

" INSERT INTO 'membership.membervisit' ('memberID') values (new.memberID);" 

任何帮助,将不胜感激 感谢

回答

0

CASE是一个表达式;你不能将它用于语句。

但是在SQLite中,触发器可以有一个WHEN clause。 (在SQLite中,NULL安全的比较是IS)。

CREATE TRIGGER update_memberID_visits 
AFTER UPDATE OF visits ON memberdata 
FOR EACH ROW 
WHEN NEW.visits IS NOT OLD.visits 
BEGIN 
    INSERT INTO membervisit(memberID) 
    VALUES (NEW.memberID); 
END; 

CREATE TRIGGER update_memberID_memberID 
AFTER UPDATE OF memberID ON memberdata 
FOR EACH ROW 
WHEN NEW.memberID IS NOT OLD.memberID 
BEGIN 
    UPDATE membervisit 
    SET memberID = NEW.memberID 
    WHERE memberID = OLD.memberID; 
END; 
+0

工作完全谢谢你。 SQLite对我来说是一个新的野兽,我真的很感激它。 – user3288887