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;
我有以下触发器:
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;