JDBC分页工具类
转自:http://xdwangiflytek.iteye.com/blog/1358080
?
?
?
?
public List<Stduent> getStudentsByPage(Page page) { List<Stduent> students = new ArrayList<Stduent>(); try { String sql = "SELECT id,name,email FROM tbl_stduent"; Connection conn = null; try { conn = DbUtil.getConnection(); Statement statement = conn.createStatement(); statement.setMaxRows(page.getEndIndex());//关键代码,设置最大记录数为当前页记录的截止下标 ResultSet resultSet = statement.executeQuery(sql); if (page.getBeginIndex() > 0) { resultSet.absolute(page.getBeginIndex());//关键代码,直接移动游标为当前页起始记录处 } while (resultSet.next()) { Stduent student = new Student(); …… students.add(student); } resultSet.close(); statement.close(); } finally { if (conn != null) { conn.close(); } } } catch (SQLException e) { e.printStackTrace(); } return students; }
?其实仔细想想JDBC分页的性能与页码有关即与statement.setMaxRows有效,越往后翻,性能越差,因为越往后一次性查询的记录数就多,但是我们从用户的角度来看不会有用户会牛逼的一页一页翻到第n页去,一般都是根据条件来缩小查询范围。所以折中的办法就是将记录数设大一点,另外就是限制用户翻页的范围,其实这些性能的前提都是在数据量非常大的情况下而言的,一般数据量少的话,基本上都可以忽略不计的。