Как мне найти набор результатов в Java? - PullRequest
0 голосов
/ 05 ноября 2010

Я пытаюсь минимизировать свои запросы SQL, поэтому я решил перечислить все идентификаторы записей, которые мне понадобятся. При этом одним запросом я могу получить всю информацию, касающуюся определенного идентификатора.

ID          Passed      flag    type    Total
123ABC      878         0       1       1070
123ABC      1272        0       1       1507
123ABC      1152        0       1       1342
123ABC      0           0       2       0
123ABC      1045        0       1       1214
123ABC      1270        0       1       1471
123ABC      0           0       1       0
123ABC      476         0       2       787
123ABC      96          0       2       158
123ABC      23          0       3       70
123ABC      11          0       2       42
987ZYX      77          1       2       135
987ZYX      0           1       2       0
987ZYX      0           1       2       0
123ABC      487         1       2       513
123ABC      1           1       2       3
987ZYX      293         0       2       759
987ZYX      5611        0       1       6386
987ZYX      0           0       2       0
987ZYX      0           0       3       0

В приведенной выше таблице показан пример результатов, которые я получу после выполнения запроса. Проблема в том, что мне нужно перебрать мой список идентификаторов и получить все записи из этого набора результатов, которые связаны с этим идентификатором. Можно ли преобразовать эту таблицу (фактически объект ResultSet) в ArrayList или HashMap для более легкой индексации, или я могу добиться этого с помощью фактического ResultSet?

Ответы [ 3 ]

2 голосов
/ 05 ноября 2010

Просто сделайте это в SQL!

Все, что вам нужно, это простой "ORDER BY ID" в вашем операторе SQL.

Почти всегда более эффективно и эффективно выполнять ваш наборманипулирование в SQL.Следует помнить, что люди, которые пишут механизмы запросов, являются лучшими программистами, чем вы или я, и они, вероятно, настраивали механизм SQL дольше, чем вы программировали.

1 голос
/ 05 ноября 2010

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

Вот ссылка: http://beginner -sql-tutorial.com / SQL-subquery.htm

На самом деле перечитывание вашего вопроса звучит так, будто вам просто нужно добавить к предложению where что-то вроде строки, где ID = '123ABC'

0 голосов
/ 05 ноября 2010

Вам необходимо скопировать полный набор результатов в другую структуру данных, чтобы работать с ее «содержимым». Обычным способом является создание класса, который может содержать значения одной строки (aka: bean):

 class Data {
   private String id;
   private int passed;
   private boolean flag;
   private int type;   // or an enum, if "types have names"
   private int total;
   public Data(){};
   // getters, setters for all fields
 }

После прочтения таблицы создайте коллекцию и добавьте бин для каждой строки:

 List<Data> result = new ArrayList<Data>();
 while (rs.next()) {
   Data data = new Data();
   data.setId(rs.getString(0));
   // ..
 }

Теперь у нас есть коллекция, в которой мы можем работать с фактическим содержимым таблицы.


Если вы хотите отфильтровать данные, например, для чтения только строк с определенным значением идентификатора, вам следует рассмотреть возможность создания команды SQL SELECT, которая просто возвращает значения для строк WHERE ID='MyID'.

...