Почему мой ResultSet отражает изменения, внесенные извне, хотя он TYPE_SCROLL_INSENSITIVE?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Почему мой ResultSet отражает изменения, внесенные извне, хотя он TYPE_SCROLL_INSENSITIVE?

Сообщение Anonymous »

Почему мой набор результатов Java показывает обновленные данные, когда я использую TYPE_SCROLL_INSENSITIVE с обновлением внешней базы данных?
Я работаю с базой данных 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();
}
SQL:

Код: Выделить всё

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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»