Java запускается триггером MySQL - PullRequest
6 голосов
/ 28 января 2012

Я пытаюсь создать некоторый код MySQL, который будет вызывать программу Java из триггера.

Вот что у меня есть:

CREATE TRIGGER trig_name after insert ON studentinfo 
FOR EACH ROW
BEGIN

END

Содержимое триггера будет вызывать Java-программу. Это возможно?

Ответы [ 4 ]

10 голосов
/ 15 июня 2012

Хотя это не стандартная функция, это очень хорошо возможно с MySQL.Вы можете использовать инструкцию SELECT .. INTO OUTFILE внутри триггера для записи в именованный канал (Windows) или файловую систему memroy (Linux).Оба из них можно легко отслеживать из кода Java (или любого другого кода в этом отношении).Используя эту технику, вы избежите опроса, и поскольку нет фактического доступа к диску, у вас будет хорошая производительность.

На самом деле я написал пакет Java для этого, так что я на 100% уверен, что это возможно и работает хорошо,К сожалению, я не имею права делиться своими усилиями здесь (мой предыдущий ответ был удален модератором), поэтому вам придется кодировать его самостоятельно, извините.

6 голосов
/ 28 января 2012

Прямой ответ: нет, вы не можете вызвать метод Java из триггера MySQL. Если у вас есть база данных оракула, вы можете, но не mysql.

Чтобы сделать то, что вы хотите сделать с MySQL, вы можете

  • сделать код, который обновляет базу данных, также уведомить свинг-приложение. Или вы можете
  • заставить триггер накапливать данные об ожидающих операциях в отдельной таблице, которую вы периодически читаете из свингового приложения.
1 голос
/ 21 марта 2014

Я должен не согласиться с Джони, посмотрите это:
MySQLUDFJavaLauncher
Инструкции

1 голос
/ 28 января 2012

Вызов метода java из базы данных SQL не является стандартной функцией. БД Informix может вызывать сценарий оболочки из хранимой процедуры, но я не знаю такой функции в MySQL (я не эксперт по MySQL).

Самое близкое, что работает со всеми базами данных, - это иметь поток и периодически опрашивать базу данных на предмет новых записей.

SELECT * FROM studentinfo WHERE id > last_seen_id

Или вы можете использовать метку времени:

SELECT * FROM studentinfo WHERE create_date >= last_seen_create_date

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

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