帮助将 ArrayList 与我的结果集一起使用

Posted

技术标签:

【中文标题】帮助将 ArrayList 与我的结果集一起使用【英文标题】:help using an ArrayList with my resultSet 【发布时间】: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 似乎已经回答了这个问题。 【参考方案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>

另见:

Places where JavaBeans are used? Show JDBC ResultSet in HTML in JSP page using MVC and DAO pattern

与问题无关,您遍历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");

【讨论】:

JSTL &lt;c:forEach&gt; 也吃地图:***.com/questions/1835683/…

以上是关于帮助将 ArrayList 与我的结果集一起使用的主要内容,如果未能解决你的问题,请参考以下文章

Arraylist 或 List 中的 Java 对象

sp怎么把几个模型合到一起

如何将 Photon Unity Networking 与我的自定义服务器一起使用?

Weka 中的不同分类结果:GUI vs Java 库

如何将 Zapier 与我的 Java RESTful API 一起使用

我可以将我的自定义 ERC-20 与我的智能合约一起使用吗?