Лучшая идея, если вы используете коллекцию вместо кэша, это использовать CachedRowSet вместо ResultSet. CachedRowSet является подынтерфейсом ResultSet, но данные уже кэшированы. Это гораздо проще, чем записать все данные в ArrayList.
CachedRowSets также могут быть запрошены сами.
CachedRowSet rs;
.......................
.......................
Integer id;
String name;
while (rs.next())
{
if (rs.getInt("id") == 13)
{
id = rs.getInt("id");
name = rs.getString("name"));
}
}
Так что вы просто вызываете CachedRowSet всякий раз, когда вам нужна информация. Это почти так же хорошо, как нарезанный хлеб. :)
EDIT:
Для ResultSet нет установленных методов, в то время как есть методы Update. Проблема с использованием метода Update с целью восстановления ResultSet заключается в том, что для обновления требуется выбрать строку. Как только ResultSet освободится, все строки будут установлены в нуль. Нулевая ссылка не может быть вызвана. Список списков имитирует сам ResultSet или, вернее, массив массивов имитирует ResultSet.
Хотя Векторы являются поточно-ориентированными, к ним прикреплены огромные накладные расходы. Вместо этого используйте ArrayList. Когда каждый вложенный список создается и помещается во внешний список вложений, вставьте его следующим образом.
nest.add(Collections.unmodifiableList(nested));
После того, как все вложенные списки будут вставлены, верните также список вложений как umodifiableList. Это даст вам потокобезопасную коллекцию без издержек на векторы.