Постоянно извлекать данные из базы данных, используя Java

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

Если в таблице изначально есть 10 строк и пользователь добавил 2 строки, он должен обнаружить это и вернуть строки.

Моя программа не должна использовать AJAX и таймеры.

7 голосов | спросил deathcaller 26 Maypm10 2010, 14:44:45

7 ответов


0

Если используемая вами база данных - Oracle, рассмотрите возможность использования триггеры , которые вызывают java сохраненный процедура , которая уведомляет вашего клиента об изменениях в БД (используя JMS , RMI или все, что вы хотите).

ответил folone 26 Maypm10 2010, 15:04:34
0

Без Ajax и таймеров эта задача, похоже, не справляется.

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

Для этого вы можете использовать серверное программирование AKA "Comet" .

В комментарии

  • мы создаем канал между клиентом и сервером, где клиент подписывается на определенный канал.
  • Сервер помещает свои данные в канал, когда он у них есть.
  • когда клиент читает канал, он получает все данные в канале и канал очищается.
  • поэтому каждый раз, когда клиент читает канал, он получает только новые данные.

Кроме того, для отслеживания изменений в БД у вас могут быть две вещи:

  1. Некоторый триггер /таймер (посмотрите Quartz Scheduler)
  2. Механизм базы событий, который помещает данные в канал о конкретных событиях.

По сути, клиент не может знать, что происходит на стороне сервера, поэтому вы должны отправить некоторые данные или событие, чтобы сообщить клиенту, что i have some new data, please call some method. Своего рода уведомление. Поэтому, пожалуйста, проверьте кометы /отправку сервера с уведомлением о событии.

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

спасибо.

ответил Parth 26 Maypm10 2010, 15:08:10
0

Не самая простая проблема, правда.

Давайте разделим это на 2 меньшие проблемы:

1) как включить перезагрузку без таймеров и AJAX

2) как реализовать серверную часть

  1. Нет способа уведомить клиентов с сервера. Таким образом, вам нужно использовать flash или silverlight или JavaFX или Applets для создания толстого клиента. Если проблема с Ajax заключается в том, что вы не знаете, как использовать его для этой проблемы, вы можете исследовать некоторые готовые библиотеки тегов jsp или компонентов jsf с поддержкой ajax.

  2. Если у вас только 1 сервер, просто добавьте кеш. Если есть несколько серверов, рассмотрите возможность использования распределенных кэшей.

ответил Roman 26 Maypm10 2010, 14:58:39
0

Если у вас есть база данных с низким трафиком, вы можете реализовать поток, который быстро проверяет наличие обновлений в БД (опрос).

Если у вас БД с большим трафиком, я бы этого не рекомендовал, так как опрос создает много дополнительного трафика.

ответил cyphorious 26 Maypm10 2010, 15:07:10
0
Клиент, уведомляющий сервер

, не очень хорошая идея (рассмотрим сценарий с 1000 клиентов). Используете ли вы какой-то постоянный слой или вам нужно придерживаться чистого JDBC?

ответил Ilya Saunkin 26 Maypm10 2010, 15:13:13
0

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

ответил Milhous 27 Maypm10 2010, 21:44:35
0

Портативный способ сделать это - добавить метку времени столбца (дата создания), которая указывает, когда строка была добавлена ​​в таблицу. После начальной загрузки контента вы просто опрашиваете новый контент, который в предложении where current_time> = create_date. В случае, если строки могут иметь одинаковые временные метки, вам необходимо отфильтровать дубликаты перед их добавлением.

ответил stacker 25 J0000006Europe/Moscow 2011, 19:17:07

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132