2009-02-02 4 views
0

У меня возникла проблема с созданием набора результатов с помощью java. Здесь он идет ...Результаты поиска с использованием объекта коллекции

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

Спасибо заранее,

Bhaskar

+0

Я вижу, что вы новичок здесь, поэтому вам нужно потратить время, чтобы посмотреть на систему тегов на месте. Многие из нас смотрят только на определенные теги. Я только нашел ваш вопрос после того, как он был восстановлен с помощью Java Tag. Правильно помечая ваши вопросы, вы получите гораздо лучшие ответы. – WolfmanDragon

+0

ohh Я не знаю об этом .. Спасибо Wolfman –

ответ

2

Лучшая идея, если вы используете коллекцию вместо кеша, заключается в использовании CachedRowSet вместо ResultSet. CachedRowSet - это Subinterface 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 для восстановления ResultSet заключается в том, что для этого требуется выбрать строку для обновления. Как только ResultSet освободится, все строки имеют значение null. Нулевую ссылку нельзя вызвать. Список списков имитирует сам ResultSet или, вернее, массив массивов, имитирующих ResultSet.

В то время как векторы являются потокобезопасными, к ним прилагаются огромные накладные расходы. Вместо этого используйте ArrayList. Когда каждый вложенный список создается и помещается во внешний список гнезд, вставьте его таким образом.

nest.add(Collections.unmodifiableList(nested)); 

После всех вложенных списков вставлены, возвратите список гнезда как umodifiableList, а также. Это даст вам потокобезопасную коллекцию без накладных расходов векторов.

+0

Да, Wolfman, вы сказали, что это хороший вариант. Но здесь есть проблема .. , когда мы используем cachedRowSetImpl, мы пытаемся поместить один объект в кеш. Это создаст проблему, когда размер результата запроса будет огромен. –

+0

Вместо этого, если мы используем список массивов/векторный объект, мы можем поместить его на несколько узлов с помощью кластеризации вправо. Итак, есть ли какой-либо api или метод, с помощью которого я могу построить набор результатов после получения данных из кеша? –

+0

Я не думаю, что понимаю, почему вы хотите восстановить ResultSet. Если вы восстановите ResultSet, вы вернетесь к тому, чтобы этот огромный объект был на одном узле. – WolfmanDragon

0

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

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

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

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

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

+0

Да, я могу получить сбор обратно из кеша. После этого мне нужно снова создать набор результатов. Это возможно? –

+0

Я думаю, что у вас есть в коллекции, которую вы возвращаетесь. Это может помочь фрагмент кода. – Techmaddy

+0

В принципе, мне нужно создать объект resultset со всеми функциями, которые может выполнять набор результатов, и данные должны быть получены из объекта коллекции. Но создается ли объект объекта результатов (считая само собой разумеющимся, что соединение db все еще существует)? –

0

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

0

Еще один вариант, который вы должны рассмотреть, это просто реорганизовать ваш код, чтобы принять коллекцию вместо ResultSet.

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

1

Посмотрите at this page. Попробуйте проверить, подходит ли класс SimpleResultSet для ваших нужд.

Если вы объедините its source в отдельный набор классов, он должен сделать трюк.