помочь с использованием ArrayList с моим resultSet - PullRequest
2 голосов
/ 16 июня 2011

У меня есть результирующий набор, который каждый раз имеет разное количество результатов, и его нужно использовать несколько раз на моей странице. В настоящее время я сохраняю свои результаты в ArrayList и планировал просто перебрать этот список. Я не знаю, сколько строк Так вот, что у меня есть:

  while (result.next()) {    
      tmpTerms.add(term = (((result_data = result.getObject("val_internal_code"))==null || result.wasNull())?" ":result_data.toString()));
      tmpTerms.add(desc = (((result_data = result.getObject("val_external_representation"))==null || result.wasNull())?" ":result_data.toString()));
      tmpTerms.add(sorter = (((result_data = result.getObject("sorter"))==null || result.wasNull())?" ":result_data.toString()));
      tmpTerms.add(sDate = (((result_data = result.getObject("sDate"))==null || result.wasNull())?" ":result_data.toString()));
  }

Хорошо, поэтому, когда я запускаю это, система печатает: Код:

[2011SP, Spring 2011, 1, 11-15-2010, 2011SU, Summer 2011, 1, 01-15-2011, 2011FL, Fall 2011, 1, 04-01-2011, 2010Q2, CE Qtr 2 2010 Dec - Feb, 2, 08-01-2010, 2011Q3, CE Qtr 3 2011 Mar - May, 2, 11-01-2010, 2011Q4, CE Qtr 4 2011 Jun - Aug, 2, 02-01-2011, 2011Q1, CE Qtr 1 2011 Sep-Nov, 2, 05-01-2011]

Я не знаю, является ли это правильным способом или нет, но пока он работает, поэтому сейчас я хочу использовать массив массивов allTerms и разделить их на строки, поэтому я хочу разбить каждый 4 результата в отдельный ряд. (Таким образом, это будет 2011SP, весна 2011, 1, 11-15-2010 в виде одной строки и т. Д.), Затем мне нужно перенести эти результаты в части HTML-страницы. так например:

<table class="t1">
  <tr>
    <td><!--Here I would want to show all rows from the allTerms arrayList with a "sorter" of 1--></td>
  </tr>
</table>
<table class="t2">
  <tr>
    <td><!--Here I would want to show all rows from the allTerms arrayList with a "sorter" of 1 and a term of ....SU (where '....' is the year) --></td>
  </tr>
</table>

Ответы [ 2 ]

9 голосов
/ 16 июня 2011

Это не совсем верно.Вам нужно создать класс Javabean, который представляет одну сущность (читай: класс, который содержит все данные столбца одной строки базы данных).

Например,

public class Term {
    private String code;
    private String description;
    private int sorter;
    private Date date;

    // Add/generate getters, setters, equals, hashcode and other boilerplate.
}

и заполнить его следующим образом:

List<Term> terms = new ArrayList<Term>();
// ...

while (resultSet.next()) {
    Term term = new Term();
    term.setCode(resultSet.getString("val_internal_code"));
    term.setDescription(resultSet.getString("val_internal_representation"));
    term.setSorter(resultSet.getInt("sorter"));
    term.setDate(resultSet.getDate("sDate"));
    terms.add(term);
}

// ...
request.setAttribute("terms", terms);

Тогда вы можете легко получить к нему доступ, используя JSTL / EL .

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
...
<table class="t1">
  <tr>
    <td>
      <c:forEach items="${terms}" var="term">
        <c:if test="${term.sorter == 1}">
          ${term.code}, ${term.description}, ${term.date}
        </c:if>
      </c:forEach>
    </td>
  </tr>
</table>
<table class="t2">
  <tr>
    <td>
      <c:forEach items="${terms}" var="term">
        <c:if test="${term.sorter == 1 and fn:endsWith(term.code, 'SU')}">
          ${term.code}, ${term.description}, ${term.date}
        </c:if>
      </c:forEach>
    </td>
  </tr>
</table>

См. Также:


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

1 голос
/ 16 июня 2011

Я собираюсь дать вам решение, отличное от @BalusC превосходным, если предположить, что у вас есть различное количество столбцов в ваших данных.

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

ArrayList<HashMap<String, String>> rows = new ArrayList<HashMap<String,String>>();

while(resultSet.next()) {
    HashMap<String, String> term = new HashMap<String, String>();
    term.put("val_internal_code",resultSet.getString("val_internal_code"));
   term.put("val_internal_representation", resultSet.getString("val_internal_representation"));
    term.put("sorter",resultSet.getInt("sorter"));
    term.put("date",resultSet.getDate("sDate"));
    rows.add(term);
}

Затем, когда вы собираетесь распечатать свои данные:

for(HashMap<String, String> row : rows){
   for(String key : row.keySet()){
       System.out.println(row.get(key));
   }
   System.out.println("End of line");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...