我只需要结果集中的两个最新项目,并且想知道在没有中断
的情况下做到这一点的最佳方法是什么。我意识到 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 属性效果很好,并且查询在返回之前已排序。感谢您的帮助
最佳答案
您应该限制查询仅返回最新的两行。这可以通过 LIMIT 子句(存在于 MySQL 中,不确定其他数据库是否存在)和 ORDER BY 子句来实现。
不需要添加索引来计算 ResultSet 返回的行数。
关于java - 如何从 ResultSet 中获取指定数量的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25366581/