java简单实现分页查询

PreparedStatement

使用PreparedStatement可以较为简单地实现分页,涉及到三个函数
1.PreparedStatement.setMaxRows(int)这个函数设置一个当前的preparedStatement能取得的行的最大值,例如setMaxRows(20),那么就只能取得1到20的数据,ResultSet.absolute(100)就错了,虽然该查询语句可以查到不止100条数据
2.ResultSet.absolute(int),将ResultSet的游标移动到一个固定的行,例如,执行一次absolute(10)之后游标指向第10行,再执行absolute(10)没有改变,api中指出absolute(0)可以用,但是某些版本的mysql不能执行absolute(0),参数可以为负数,为负数的时候就加上resultset的size,例如absolute(-1)会到记录的最后一条
3.ResultSet.relative(int),将ResultSet的游标移动固定的行,例如,执行一次relative(10)之后游标指向第10行,再执行relative(10)游标指向第20行

limit

mysql 可以使用limit sql语句分页,select * from table limit m,n;
选取从m(0开始)开始,长度为n的数据

代码

/**
     * @param page 获取第几页
     * @param rows 每一页获取几条数据
     * @param conn 数据库连接
     */
    public static ResultSet pageWithAbsolute(int page,int rows,Connection conn) throws SQLException {
        PreparedStatement pst=conn.prepareStatement("SELECT * FROM test ");
        pst.setMaxRows(page*rows);//设置为需要获取的最后一个数据
        ResultSet rs=pst.executeQuery();
        rs.absolute((page-1)*rows);//设置为需要获取的第一个数据
        return rs;
    }

    /**
     * @param page 获取第几页
     * @param rows 每一页获取几条数据
     * @param conn 数据库连接
     * */
    public static ResultSet pageWithRelative(int page,int rows,Connection conn) throws SQLException {
        PreparedStatement pst=conn.prepareStatement("SELECT * FROM test ");
        pst.setMaxRows(page*rows);//设置为需要获取的最后一个数据
        ResultSet rs=pst.executeQuery();
        rs.relative((page-1)*rows);//设置为需要获取的第一个数据
        return rs;
    }

    /**
     * @param page 获取第几页
     * @param rows 每一页获取几条数据
     * @param conn 数据库连接
     * */
    public static ResultSet pageWithLimit(int page,int rows,Connection conn) throws SQLException {
        PreparedStatement pst=conn.prepareStatement("SELECT * FROM test limit ?,?");
        pst.setInt(1,(page-1)*rows);
        pst.setInt(2,rows);
        ResultSet rs=pst.executeQuery();
        return rs;
    }

猜你喜欢

转载自blog.csdn.net/fate_killer_liu_jie/article/details/53170669