2016-09-22 2 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