Опрос базы данных с использованием триггеров в приложении Java - PullRequest
0 голосов
/ 26 июня 2011

Может ли кто-нибудь указать мне правильное направление для этого:

Я хочу иметь асинхронную функцию в моей Java-программе, которая при вызове непрерывно отслеживает изменения какой-либо таблицы в БД.И когда происходит изменение, оно возвращает какое-то событие.Но он продолжает делать это, пока приложение работает.

Любая помощь будет отличной ... thnx!

1 Ответ

1 голос
/ 26 июня 2011
  • Вы можете использовать поток в функции, который может отслеживать изменения в некоторой таблице.
  • В цепочке введите код для доступа к запросам, связанным с базой данных.

    Вы можете использовать Quartz - сервис планирования заданий с открытым исходным кодом.

    http://www.quartz -scheduler.org /

Источник: Пример триггера с вызовом метода Java при каждом вызове triiger

Пример запуска

В этом примере создается триггер. Он следует модели разработки, описанной в «Модель 2: Использование модели разработки с прикрепленными хранимыми процедурами». Пример создания триггеров с использованием модели загрузки и публикации см. В разделе «Пример аргументов триггера». В этом примере вы сначала создаете таблицу и класс Java. Затем вы прикрепляете класс к столу. И, наконец, вы создаете и запускаете курок.

Класс SalaryTrigger содержит метод check_sal_raise. Метод печатает сообщение, если сотрудник получает повышение заработной платы более чем на десять процентов. Триггер запускает метод перед обновлением зарплаты в таблице EMP.

Поскольку check_sal_raise записывает сообщение в стандартный вывод, вы должны использовать версию SQL * Plus для DOS для выдачи команд SQL в примере. Запустите SQL * Plus в окне командной строки DOS, набрав:

плюс80 имя пользователя / пароль @ connect_string

connect_string - это ODBC: имя_источника_данных. Например, чтобы подключиться к базе данных по умолчанию как пользователь SYSTEM, введите в командной строке DOS:

plus80 system / pw @ odbc: вежливый

В командной строке SQL * Plus создайте и заполните таблицу EMP следующим образом:

CREATE TABLE EMP (E # int, name char (10), зарплата реальная,

Ограничение E # _PK первичный ключ (E #));

ВСТАВИТЬ В ЗНАЧЕНИЯ EMP (123, «Smith», 60000);

ВСТАВИТЬ В ЗНАЧЕНИЯ EMP (234, «Джонс», 50000);

Поместите следующий класс в SalaryTrigger.java:

 class SalaryTrigger {

      private int eno;

      public SalaryTrigger(int enum) {

      eno = enum;

      }

     public void check_sal_raise(float old_sal,float new_sal)
     {
        if (((new_sal - old_sal)/old_sal) > .10)
        {
           // raise too high  do something here
           System.out.println("Raise too high for employee " + eno);
        }
     }
   }

Конструктор класса SalaryTrigger принимает целое число, которое он присваивает атрибуту eno (номер сотрудника). Экземпляр SalaryTrigger создается для каждой строки (то есть для каждого сотрудника) в таблице EMP.

Метод check_sal_raise является нестатическим методом. Для выполнения он должен вызываться объектом своего класса. Всякий раз, когда столбец зарплаты строки в EMP изменяется, создается экземпляр SalaryTrigger, соответствующий этой строке (если он еще не существует) с номером сотрудника (E #) в качестве аргумента конструктора. Затем триггер вызывает метод check_sal_raise.

После создания класса Java вы присоединяете его к таблице следующим образом:

ALTER TABLE EMP ATTACH JAVA SOURCE "SalaryTrigger" IN '.'

С КОНСТРУКТОРНЫМИ АРГАМИ (E #);

Этот оператор указывает Oracle Lite скомпилировать исходный файл Java SalaryTrigger.java, найденный в текущем каталоге, и присоединить полученный класс к таблице EMP. Этот оператор также указывает, что при создании экземпляра класса Oracle Lite должен использовать конструктор, который принимает в качестве аргумента значение в столбце E #.

После присоединения класса к таблице создайте триггер следующим образом:

CREATE TRIGGER CHECK_RAISE ПРЕЖДЕ ЧЕМ ОБНОВИТЬ ЗАПЛАТУ НА EMP ДЛЯ КАЖДОГО РЯДА

"check_sal_raise" (old.salary, new.salary);

/

Этот оператор создает триггер с именем check_raise, который запускает метод check_sal_raise перед любым обновлением столбца зарплаты любой строки в EMP. Oracle Lite передает старое значение и новое значение столбца зарплаты в качестве аргументов метода.

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

Следующая команда обновляет зарплату и запускает триггер:

ОБНОВЛЕНИЕ EMP SET SALARY = SALARY + 6100 WHERE E # = 123;

Это приводит к следующему выводу:

Поднять слишком высоко для работника 123

...