У меня есть проблема, и мне нужно кое-что прояснить.
Я использую триггер для обнаружения изменений, внесенных в мою базу данных, это означает, что я установил всю свою таблицу с триггером для вставки, обновления и удаления (MySQL)
Затем я записываю это изменение в специально созданную мной таблицу, чтобы она содержала всю информацию об изменениях.Давайте назовем это xtable.(Эта таблица не оснащена триггером)
Моя Java-программа должна постоянно читать этот xtable, чтобы сообщить другому приложению об изменении.
Что ж, проблема в том, что когда я читаю xtable вцикл, я могу только прочитать начальное значение xtable, когда я установил соединение с базой данных.(соединение установлено вне цикла)
Если в базу данных было внесено изменение, которое приведет к появлению новой строки в xtable, эта новая строка, созданная триггером, не будет обнаружена, независимо от того, сколько раз япрочитайте его, выполнив запрос "select * from xtable" ..
Код выглядит следующим образом:
public static void main(String[] args) {
Connection conn = null;
try {
conn = database.getConnection();
Statement state = conn.createStatement();
String query = "select * from `xtable`;";
while (true) {
ResultSet rs = state.executeQuery(query);
while(rs.next){
// Some code for letting the other application know of the change
}
}
} catch (SQLException ex) {
} finally {
if (conn != null) {
conn.close();
}
}
}
Так что, в основном, если я запускаю программу, когда таблица xtable пуста, я всегда получаюпустой ResultSet, даже если иногда появляется новая строка.
На самом деле эту проблему можно решить, установив соединение внутри цикла, но тогда это приведет к другой проблеме, поскольку она будет потреблять все больше и больше ресурсов, так какпетля обойти.(Я уже попробовал это, и он в конечном итоге будет использовать все ресурсы на моем компьютере после того, как иногда, даже когда я уже правильно его закрыл)
Так может кто-нибудь дать мне несколько советов, что делать?
Я впервые пишу здесь вопрос, извините, если есть какое-то правило, которому я не следую, и, пожалуйста, дайте мне правильное направление.