【问题标题】:help using an ArrayList with my resultSet帮助将 ArrayList 与我的结果集一起使用
【发布时间】:2011-09-16 13:03:59
【问题描述】:

我有一个每次都有不同数量的结果的结果集,需要在我的页面上多次使用。目前,我将我的结果存储在一个 ArrayList 中,并计划只循环遍历 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 arrayList,并将它们分成几行,所以我想拆分每个4 个结果放在单独的行中。 (所以它将是 2011SP,Spring 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>

【问题讨论】:

  • 你好像忘记问问题了:)
  • "所以我现在要做的是使用我的 allTerms arrayList,并将它们分成行,所以我想将每 4 个结果分成单独的行。(所以它会是 2011SP,2011 年春季, 1, 11-15-2010 作为一行等等),接下来,我需要将这些结果转移到 HTML 页面的某些部分。例如:“这基本上是我的问题.....抱歉不是以问题形式。我只是想弄清楚如何做到这一点
  • 哎呀,我的错。我只是读了一部分。 BalusC 似乎已经回答了这个问题。

标签: java arrays jsp arraylist


【解决方案1】:

这并不完全正确。您需要创建一个表示单个实体的 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 的方式并没有给我强烈的感觉,即数据模型已正确设计。确保您为其保存的数据使用正确的列类型。确保您在列上放置了正确的非空约束和键约束。我还会重新考虑列名,并尝试更加自我记录和一致。

【讨论】:

    【解决方案2】:

    假设您的数据中有不同数量的列,我将为您提供一个不同于 @BalusC 优秀解决方案的解决方案。

    如果您有不同数量的列,您可以选择使用键值数据结构的路线,即某种类型的 Map,然后将这些映射存储在 List 中。

    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");
    }
    

    【讨论】:

    猜你喜欢
    • 2010-09-23
    • 2020-08-19
    • 2012-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-26
    • 1970-01-01
    相关资源
    最近更新 更多