SQlite (Room) 触发器:两个查询

SQlite (Room) Trigger: two queries

我有以下触发器:

database.execSQL("DROP TRIGGER IF EXISTS Trigger_AfterIncomeRecordInsert");
database.execSQL(
"CREATE TRIGGER IF NOT EXISTS Trigger_AfterIncomeRecordInsert " +
"AFTER INSERT ON IncomeRecord " +
"BEGIN  " +
"UPDATE FinanceRepeatment SET numOfCreatedRepeatments = numOfCreatedRepeatments +1, " +
"actIncomeRecordId = NEW.id WHERE NEW.financeRepId=FinanceRepeatment.id;" +
"DELETE FROM favourite_tiles WHERE favourite = NEW.id;" +
"END;");

如果我只使用一个查询 update/delete 查询就完美了,但是如果我想在这种情况下同时使用这两个查询,我会收到以下错误:END expected, got 'DELETE'

这就是为什么我的问题是 SQLITE 甚至支持像这种情况下的多个查询,还是由于语法错误导致的错误?

您的代码是一个有效的 sql 语句并且应该可以工作。

我能想到它抛出错误的唯一原因是方法的限制 execSQL():

public void execSQL (String sql)
Parameters sql String: the SQL statement to be executed.
Multiple statements separated by semicolons are not supported.

解决方法是创建 2 个单独的触发器:

CREATE TRIGGER Trigger_AfterIncomeRecordInsert_1 AFTER INSERT ON IncomeRecord 
BEGIN  
  UPDATE FinanceRepeatment 
  SET numOfCreatedRepeatments = numOfCreatedRepeatments +1, 
      actIncomeRecordId = NEW.id 
  WHERE NEW.financeRepId=FinanceRepeatment.id;
END;

CREATE TRIGGER Trigger_AfterIncomeRecordInsert_2 AFTER INSERT ON IncomeRecord 
BEGIN  
  DELETE FROM favourite_tiles 
  WHERE favourite = NEW.id;
END;