Я смущен поведением a ResultSet
это имеет тип TYPE_SCROLL_SENSITIVE
.
Мое понимание этого:
Thread.sleep(10000)
, который останавливает программу в течение 10 секунд.На шаге 4 я ожидаю, что печатное значение столбца будет отличаться от значения, распечатанного на шаге 1. Но я всегда получаю то же значение (даже если мой ResultSet
имеет тип SCROLL_TYPE_SENSITIVE
).
Я неправильно понимаю что-то здесь?
Ниже код, который я использую.
private void doStuff() throws Exception
{
final String query = "select * from suppliers where sup_id=420";
Statement stmt = this.con.createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery(query);
rs.next();
System.out.println("City : " + rs.getString("city"));
Thread.sleep(10000); // While this executes, I do a manual update !
System.out.println("City : " + rs.getString("city"));
}
Я неправильно понимаю что-то здесь?
Да. Вы должны снова получить, чтобы получить новейшее состояние таблицы, либо выработав Выберите
самостоятельно или вызов Resuleset.refreshrow ()
. Более того, прочитайте документы Resuleset.refreshrow ()
, прежде чем использовать его, в противном случае вы можете получить неожиданные результаты.
Государства док, касающиеся Type_scroll_sensitive,
type_scroll_sensitive
Константа, указывающая тип для Объект результатов, который прокручивается и вообще чувствителен к изменениям сделано другими.
, что просто означает, что это будет чувствительно к изменениям, сделанным другими в том же объекте результатов. Чтобы понять концепцию, я бы посоветовал посмотреть на этот чиновник Учебное пособие JDBC: Обновление таблиц .
Хорошо, редактирование моего поста, чтобы включить конкретную строку из оригинального учебного пособия,
со прокручиваемой набор результатов, вы можете Перейти к строкам, которые вы хотите изменить, и Если тип имеет тип_scroll_sensitive, Вы можете получить новое значение подряд После того, как вы изменили это.