Проблема выполнения триггера SQlite - PullRequest
1 голос
/ 13 июня 2011

Я новичок в Android и SQlite.Я пытался создать следующий триггер для базы данных SQLite в Android.

final String CREATE_TRIGGER_STATES = 
            "CREATE TRIGGER fk_insert_state BEFORE "
            + "INSERT on tbl_states"
            + "FOR EACH ROW "
            + "BEGIN "
            + "SELECT RAISE(ROLLBACK, 'insert on table "
            + "\"tbl_states\" violates foreign key constraint "
            + "\"fk_insert_state\"') WHERE (SELECT id FROM "
            + "tbl_countries WHERE id = NEW.country_id) IS NULL; "
            + "END;";
        db.execSQL(CREATE_TRIGGER_STATES);

Журнал ошибок:

android.database.sqlite.SQLiteException: near "EACH": syntax error: CREATE TRIGGER fk_insert_state BEFORE INSERT on tbl_statesFOR EACH ROW BEGIN SELECT RAISE(ROLLBACK, 'insert on table "tbl_states" violates foreign key constraint "fk_insert_state"') WHERE (SELECT id FROM tbl_countries WHERE id = NEW.country_id) IS NULL; END;

Есть ли проблема с синтаксисом?

Ответы [ 2 ]

2 голосов
/ 13 июня 2011

Я предполагаю, что соответствующая часть сообщения об ошибке прямо здесь:

... on tbl_statesFOR EACH ROW ...
//--------------^^

Вам не хватает пробела после tbl_states:

final String CREATE_TRIGGER_STATES = 
            "CREATE TRIGGER fk_insert_state BEFORE "
            + "INSERT on tbl_states " // Missing space added
            //... Continue on as before.
1 голос
/ 13 июня 2011

Вы забыли пробел:

 + "INSERT on tbl_states "    // Space missing here
 + "FOR EACH ROW "
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...