Я работаю с базой данных MySQL на Java, и у меня есть набор результатов с TYPE_SCROLL_INSENSITIVE. Я ожидаю, что изменения, внесенные в данные в базе данных, не будут отражаться в моем наборе результатов после внешнего обновления. Однако данные показывают обновленные значения.
Java:
Код: Выделить всё
Statement statement = connection.createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY
);
ResultSet resultSet = statement.executeQuery("SELECT * FROM table1");
if (resultSet.next()) {
System.out.print(resultSet.getInt("id") + " ");
System.out.print(resultSet.getString("name") + " ");
System.out.print(resultSet.getString("value"));
System.out.println();
}
// Externally changing the value in database
Thread.sleep(10 * 1000); // Simulate delay for external change
resultSet.refreshRow();
resultSet.beforeFirst();
if (resultSet.next()) {
System.out.print(resultSet.getInt("id") + " ");
System.out.print(resultSet.getString("name") + " ");
System.out.print(resultSet.getString("value"));
System.out.println();
}
Код: Выделить всё
START TRANSACTION;
UPDATE table1 SET name = 'data100' WHERE id = 1;
COMMIT;
1 data1 2800
1 data100 2800
Ожидается Вывод:
1 data1 2800 (предыдущие данные)
1 data1 2800 (предыдущие данные)
Я использую ResultSet.TYPE_SCROLL_INSENSITIVE, ожидая, что изменения, внесенные внешней транзакцией, будут отражены в ResultSet.
Я также попробовал добавить Thread.sleep(10 * 1000), чтобы имитировать некоторую задержку между выборкой и внешним обновлением, но ResultSet по-прежнему не отражает обновленные данные.
Почему мой ResultSet отражает изменения, внесенные извне, даже если он TYPE_SCROLL_INSENSITIVE? Что мне следует сделать, чтобы увидеть обновленные данные в наборе результатов с TYPE_SCROLL_SENSITIVE, а не TYPE_SCROLL_INSENSITIVE? Есть ли какая-либо другая конфигурация или подход, который мне нужно использовать для достижения такого поведения?
Подробнее здесь: https://stackoverflow.com/questions/792 ... -type-scro
Мобильная версия