如何从ResultSet中获取一定数量的行

时间:2014-08-18 15:12:25

标签: java html prepared-statement resultset

我只需要结果集中最新的两个项目,并且想知道如果没有break,最好的方法是什么。我意识到rs.next()会返回truefalse并尝试使用计数器停止,但失败了。我现在有这个:

while(rs.next()){
    String name = rs.getString("name");
    String startTime = rs.getString("starting_time");
    String endTime = rs.getString("ending_time");
    String date = rs.getString("directory");
    String loc = rs.getString("location");

    htmlBuilder.append("<li><a href='public/committees/calendar'>"+ name+"<br>"); 
    htmlBuilder.append(date +"  "+startTime+" - "+endTime+"</a> <!-- Link/title/date/start-end time --><br>");
    htmlBuilder.append("<strong>Location: </strong>"+loc+"<br>");
    htmlBuilder.append("</li>");        
}       
html = htmlBuilder.toString();

正如您所知,这会返回ResultSet中的所有内容,但我只需要前两个条目。

这是我的正确查询:

SELECT  to_char(to_date(to_char(x.starting_date), 'J'),'mm/dd/yyyy') as start_date,  to_char(to_date(to_char(x.ending_date), 'J'),'mm/dd/yyyy') as end_date,  to_char(to_date(to_char(x.starting_date), 'J'),'yyyy-mm-dd') as directory,  x.starting_time,  x.ending_time,  x.description,  x.description as location,  x.name,  x.short_name,  x.add_info_url,  x.contact_name,  x.contact_info FROM calitem x, calendar x, calitemtypes x WHERE x.calendar_id = x.calendar_id AND x.short_name LIKE ? AND x.style_id = 0 AND x.starting_date > to_char(sysdate-1, 'J') AND x.item_type_id = x.item_type_id AND ROWNUM <= 3 ORDER BY to_date(to_char(x.starting_date), 'J')

添加rownum属性非常有效,并在返​​回之前对查询进行了排序。谢谢你的帮助

1 个答案:

答案 0 :(得分:4)

您应该将查询限制为仅返回两个最新的行。这可以通过LIMIT子句(存在于MySQL中,不确定其他DB)和ORDER BY子句来实现。

无需添加可计算ResultSet返回的行的索引。