我只需要结果集中最新的两个项目,并且想知道如果没有break
,最好的方法是什么。我意识到rs.next()
会返回true
或false
并尝试使用计数器停止,但失败了。我现在有这个:
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属性非常有效,并在返回之前对查询进行了排序。谢谢你的帮助
答案 0 :(得分:4)
您应该将查询限制为仅返回两个最新的行。这可以通过LIMIT子句(存在于MySQL中,不确定其他DB)和ORDER BY子句来实现。
无需添加可计算ResultSet返回的行的索引。