Построение набора результатов с использованием объекта коллекции - PullRequest
0 голосов
/ 02 февраля 2009

У меня была проблема при построении набора результатов с использованием Java. Вот и все ...

Я сохраняю объект коллекции, который организован в виде строки, взятой из объекта набора результатов, и помещаю объект коллекции (который хранится как список векторов / массивов) в кэш и пытаюсь получить тот же объект коллекции. Здесь мне нужно снова собрать набор результатов, используя объект коллекции. Теперь я сомневаюсь, что построение набора результатов таким способом возможно или нет? Пожалуйста, дайте мне знать как можно скорее.

Заранее спасибо,

Bhaskar

Ответы [ 5 ]

2 голосов
/ 02 февраля 2009

Лучшая идея, если вы используете коллекцию вместо кэша, это использовать 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. Это даст вам потокобезопасную коллекцию без издержек на векторы.

1 голос
/ 02 февраля 2009

Взгляните на эту страницу . Попробуйте посмотреть, подходит ли класс SimpleResultSet для ваших нужд.

Если вы объедините его источник в отдельный набор классов, это должно сработать.

0 голосов
/ 02 февраля 2009

Другой вариант, который вы должны рассмотреть, - это просто рефакторинг вашего кода, чтобы он принимал Collection вместо ResultSet.

Я предполагаю, что вы передаете этот ResultSet методу, который перебирает его. Вы могли бы также изменить метод для перебора ArrayList ...

0 голосов
/ 02 февраля 2009

Я посоветую вам использовать CachedRowSet. Чтобы узнать больше о CachedRowSet, обратитесь к http://www.onjava.com/pub/a/onjava/2004/06/23/cachedrowset.html этой статье. Создав этот CachedRowSet, вы можете отключиться от базы данных, внести некоторые изменения в кэшированные данные, а письмо даже может открыть соединение с БД и зафиксировать изменения обратно в базу данных.

0 голосов
/ 02 февраля 2009

Из того, что я мог получить, твой код может быть таким:

List collection = new ArrayList();
collection.add(" A collection in some order");

List cache = new ArrayList();
cache.add(collection); ...

Теперь, когда вы получите, я думаю, вы приведете свою коллекцию в порядок, так как вы использовали List.

Если это не то, что вы ожидали, прокомментируйте.

...