Операция запуска Android Sqlite проходит - PullRequest
1 голос
/ 15 мая 2011

1st Table

Это моя первая таблица, в ней 3 столбца, и все они вводятся пользователем. Никаких осложнений, и все работает отлично. Но есть другая таблица, и она зависит от этой таблицы в 3-м столбце. т.е. в колонке с номером комнаты. Пожалуйста, игнорируйте соглашение об именах, так как я действительно не следовал никаким соглашениям об именах.

second table

Это моя вторая таблица, и, как вы можете видеть, последняя колонка имеет номер комнаты. пожалуйста, игнорируйте соглашение об именах. этот столбец номера комнаты является внешним ключом, он зависит от 1-й записи таблицы или удаления Теперь я создал схему для 2-й таблицы. который объявляет, что у него есть 5 столбцов, и последний является внешним ключом.

 private static final String DATABASE_CREATE_NOTES_ID_TABLE =
    ("CREATE TABLE "+ DATABASE_NOTES_TABLE +" ("+ KEY_ROWID +" INTEGER PRIMARY KEY AUTOINCREMENT, "+
            KEY_TIME + " TEXT, "+ 
            KEY_NOTES + " TEXT, "+ 
            KEY_DATE +  " TEXT, " +
            KEY_ROOMS + " INTEGER , FOREIGN KEY (" + KEY_ROOMS + ") REFERENCES " + DATABASE_PATIENT_TABLE +" (" +KEY_ROOM_NUMBER+ "));");

Таблицы, как вы видите, создаются успешно. Теперь мне нужно написать оператор TRIGGER, основанный на том, что когда я удаляю номер комнаты из первой таблицы, тогда все строки во 2-й таблице, имеющие одинаковый номер комнаты, должны быть удалены. И если я добавлю новый номер комнаты в первую таблицу, то он должен быть добавлен во 2-й таблице. Оператор триггера для вставки нового номера комнаты, который я написал, выглядит следующим образом

    db.execSQL("CREATE TRIGGER fk_notesTable_roomNumber " +
                " BEFORE INSERT "+
                " ON "+DATABASE_NOTES_TABLE+
                " FOR EACH ROW BEGIN"+
                " SELECT CASE WHEN ((SELECT "+KEY_ROOM_NUMBER+" FROM "+DATABASE_PATIENT_TABLE+" WHERE "+KEY_ROOM_NUMBER+"=new."+KEY_ROOMS +" ) IS NULL)"+
                " THEN RAISE (ABORT,'Foreign Key Violation') END;"+
                "  END;");

Этот фрагмент кода, который я добавил в onCreate () моего файла базы данных. Что еще мне делать? Здесь ничего не происходит. Пожалуйста, укажите мне, где я делаю ошибку. Спасибо в тоннах, Шаист

1 Ответ

2 голосов
/ 17 мая 2011

Вы добавили триггер INSERT. Это вызывает ошибку, если вы пытаетесь вставить строку, которая не соответствует ограничению, указанному в триггере; он ничего не делает для удаления строк из одной таблицы, когда строки из другой удаляются.

Вам необходим триггер AFTER DELETE в первой таблице, который удаляет соответствующие строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...