Доброго времени суток.
Как я понял ResultSet.TYPE_SCROLL_SENSITIVE, в отличии от ResultSet.TYPE_SCROLL_INSENSITIVE, чувствителен к изменениям, которые произошли с базой данных после создания объекта ResultSet. Но я не могу понять, что означает "чувствителен к изменениям".
Я пробовал создавать ResultSet с типом TYPE_SCROLL_SENSITIVE и в течении 10 секунд запрашивать первую строку таблицы:
ResultSet result = statement.executeQuery("select * from numbers");
for(int i = 0; i < 10; i++) {
result.absolute(1);
System.out.printf("number=%d name=%s\n",
result.getInt("number"), result.getString("name"));
Thread.sleep(1000);
}
В тоже время запускать второй поток в котором каждые 500 миллисекунд менять первую строку этой же таблицы:
for(int i = 0; i < 10; i++) {
Thread.sleep(500);
String sql = String.format("UPDATE NUMBERS SET number=%d WHERE id=1",
(int) (Math.random() * 900_000_000));
statement.executeUpdate(sql);
}
Я ожидал, что вносимые изменения увидит ResultSet из первого потока, но это не так. Объект ResultSet созданный с типом ResultSet.TYPE_SCROLL_INSENSITIVE ведет себя точно также.
Объясните пожалуйста, в чем тогда заключается разница между этими двумя типами ResultSet.
P.s. использую СУБД H2.
@Override
public boolean supportsResultSetType(int type) {
debugCodeCall("supportsResultSetType", type);
return type != ResultSet.TYPE_SCROLL_SENSITIVE;
}
Драйвер H2 не поддерживает TYPE_SCROLL_SENSITIVE.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости