Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

help using an ArrayList with my resultSet

I have a resultSet that has a different number of results every time, and needs to be used multiple times on my page. Currently, I am storing my results in an ArrayList, and was planning to just loop through the arraylist. I dont know how many rows So this is what I have so far:

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

Okay, so when I run this, the system prints: Code:

[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]

I dont know if this is the correct way of doing it or not, but it is working so far, so what I want to do now is use my allTerms arrayList, and separate them into rows, so I want to split every 4 results into a separate row. (So it would be 2011SP, Spring 2011, 1, 11-15-2010 as one row and so on), next, I would need to transfer these results to parts of a HTML page. so for ex:

<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>
like image 339
Dan Avatar asked Feb 06 '26 08:02

Dan


1 Answers

That's not entirely right. You need to create a Javabean class which represents a single entity (read: a class which contains all column data of a single database row).

E.g.

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

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

And populate it as follows:

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

Then you can access it nicely using 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>

See also:

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

Unrelated to the problem, the way as you traversed the ResultSet didn't give me a strong feeling that the datamodel is properly been designed. Ensure that you're using the right column type for the data it holds. Ensure that you're putting the right non-null and key constraints on the columns. I'd also reconsider the column names and try to be more self-documenting and consistent.

like image 99
BalusC Avatar answered Feb 07 '26 21:02

BalusC



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!