Как использовать TRIGGER в Android SQLite - PullRequest
7 голосов
/ 12 мая 2011

У меня есть две таблицы в базе данных:

  • Таблица первая содержит столбец с именем и номером комнаты
  • Таблица два имеет столбец с номером и временем.

Теперь, когда номер комнаты из первого столбца удален или добавлен, моя вторая таблица также должна быть обновлена.Я думаю, что это возможно с помощью команды TRIGGER, но я не совсем уверен, как это использовать.

Обычно мой оператор создания базы данных выглядит следующим образом:

private static final String DATABASE_CREATE_PATIENT_ID_TABLE =
    "create table " + DATABASE_PATIENT_TABLE +
    " (_id integer primary key autoincrement,"
     + "patient_number text not null, room_numbertext not null, " +
            "patient_initial text not null);";

Теперь, когда комнаты удалены или добавлены в первую таблицу, моя вторая таблица должна быть обновлена.

private static final String DATABASE_CREATE_NOTES_ID_TABLE =
    "create table " + DATABASE_NOTES_TABLE +
    " (_id integer primary key autoincrement," +
     " room_number text not null, time_hour text not null, " +
            "notes_hour text not null, today_date text not null);";

Изначально я сравнивал содержание двух таблиц.Но это определенно приведет к проблемам с производительностью позже, когда данные увеличатся.Так что я наткнулся на вещь ТРИГГЕР.Я думаю, что это может решить мою проблему, но я не знаю, как именно я должен это использовать.

Я узнал об этом из Использование базы данных SQLite с Android .

Я объяснил эту проблему с помощью снимка экрана в моем другом вопросе.Пожалуйста, посмотрите на него, и, пожалуйста, направьте меня новый вопрос

Ответы [ 3 ]

6 голосов
/ 12 мая 2011

Простой старт для вас

create trigger simple_trigger1 after insert on database_patient_table begin update database_notes_table; end 
create trigger simple_trigger2 after delete on database_patient_table begin update database_notes_table; end

Используйте эту документацию http://www.sqlite.org/lang_createtrigger.html

4 голосов
/ 19 мая 2011

В зависимости от того, на какой версии SQLite ваше приложение работает на , вы можете использовать поддержку внешнего ключа SQLite .

В более старых версиях SQLite вы можете использовать утилиту genfkey для создания триггеров для принудительного применения ограничений внешнего ключа (более старые версии SQLite анализировали ограничения внешнего ключа, добавленные во время оператора CREATE TABLE, но на самом деле не будет их реализовывать).

Надеюсь, это поможет.

1 голос
/ 24 февраля 2015

Демонстрация для Sqlite Trigger в Android ЗДЕСЬ

Триггер - это некоторый процедурный код, выполняемый после того, как в нашей базе данных произошло определенное событие.

У меня естьнаписал демонстрационный пример для триггера.

Пример: рассмотрим базу данных любого университета.Таким образом, если какая-либо запись ученика добавляется в таблицу ученика, новая строка (кортеж) автоматически добавляется в секцию библиотеки или секции столовой и т. Д.

Таким образом, записывая простой триггер, мы можем автоматически вставлять новые записи в другие секции, избегая необходимостикод пластины.

Схема

 CREATE TABLE student (sid INTEGER PRIMARY KEY, sname TEXT)  
 CREATE TABLE canteen (cid , sid )  
 CREATE TABLE library (lid INTEGER PRIMARY KEY, sid TEXT)

Триггер для автоматического добавления записей в библиотеку и таблицу столовой:

CREATE TRIGGER if not exists add_student   
   AFTER INSERT  
 ON[student]  
   for each row  
     BEGIN  
        insert into library values (2 , new.sid );  
        insert into canteen values (3 , new.sid);  
     END; 

Объяснение: Концепция здесь заключается в создании триггера,которые вставляют значения в столовую и библиотеку на основе нового идентификатора студента.

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