java读取mysql数据了过大,如何实现分页读取,求代码

sql = "SELECT id, name, url ,country FROM websites";/*需要从表里面读取的数据*/
ResultSet rs = stmt.executeQuery(sql);

String fn = "F://NEWtest//again1.txt";
wf(fn,"ID ,站点名称, 站点,country.");
while(rs.next()){

    int id  = rs.getInt("id");            
    String name = rs.getString("name");
    String url = rs.getString("url");
    String country = rs.getString("country");



    System.out.print("ID: " + id);

    System.out.print(", 站点名称: " + name);

    System.out.print(", 站点 URL: " + url);
    System.out.print(", country: " + country);

    System.out.print("\n");
    wf(fn,id+"," + name+ "," + url+ "," + country);
}
    这是读取数据库的代码,需要分页读取的代码,麻烦详细些,我刚刚接触java,谢谢

下面方法select(String page)的page是前台传到后台的 ,然后处理下page从数据库中分页顺序取出数据
public JSONArray select(String page) {

    int limit = 10;
    JSONArray jsonArr = new JSONArray();
    Statement stmt = null;
    int start = (Integer.valueOf(page).intValue()-1) * limit;
    String sql = "SELECT id, name, url ,country FROM websites ORDER BY CREATTIME DESC LIMIT " + start + ",10;";
    ResultSet rs = stmt.executeQuery(sql);
            while(rs.next()){

int id  = rs.getInt("id");            
String name = rs.getString("name");
String url = rs.getString("url");
String country = rs.getString("country");



System.out.print("ID: " + id);

System.out.print(", 站点名称: " + name);

System.out.print(", 站点 URL: " + url);
System.out.print(", country: " + country);

System.out.print("\n");
wf(fn,id+"," + name+ "," + url+ "," + country);

}
}

mysql 可以用limit

SELECT id, name, url ,country FROM websites limit offset,limit
例如:你要查询数据库结果集中1-5的数据可以 SELECT id, name, url ,country FROM websites limit 0,5 结果就是五条,其他依次类推
offset是起始坐标,limit代表每页记录数

如果你传的参数是页码如第一页,可以
SELECT id, name, url ,country FROM websites limit (offset-1)* limit , limit

把sql = "SELECT id, name, url ,country FROM websites";
改为sql = "SELECT id, name, url ,country FROM websites limit (pageNo-1)*pageSize, pageSize";
pageNo为(页码)、pageSize(每页条数)
其他的不需要怎么改

没用框架吗?一般框架都有分页功能,使用JDBC分页的话MYSQL可以使用LIMIT,不要查所有数据,只查你需要展示的,这样速度就快了

如果你只是显示部分代码到页面,使用LIMIT
如果你数据量十分大,但都要查询出来写到文件,为避免内存溢出,可以多次查询,但还是用LIMIT限制查询数量

sql = "SELECT id, name, url ,country FROM websites limit 1,10;##查询前10条数据

limit 起始数 , 每页显示个数

int pageSize = 10 ;// 每页显示条数(根据业务自行设置)
int pageNumber = 1;//查询的页数
int beginIndex = (pageNumber - 1) * pageSize;

sql = "SELECT id, name, url ,country FROM websites limit beginIndex , pageSize;

首先。你需要一个pageBean对象
/**
* 查询结果并分页显示
*/
@Override
public Page queryMessageListForPageOne(Map params, int page, int pageSize) {
int allRow = selectMessageListSize(params);// 总记录数
int totalPage = PageBean.countTotalPage(pageSize, allRow);// 总页数
final int offset = PageBean.countOffset(pageSize, page);// 当前页开始记录
final int length = pageSize;// 每页记录数
final int currentPage = PageBean.countCurrentPage(page);
final int start = (currentPage - 1) * length;
final int end = currentPage * length;

    StringBuffer sql = new StringBuffer("select * from hfvast_smg_2 o where 1 = 1 ");
    // 短信编号
    String id = replaceStr((String) params.get("id"));
    if (null != id && !"".equals(id)) {
        sql.append(" and  o.ID ='" + id + "' ");
    }
    // 目标号码
    String tagNum = replaceStr((String) params.get("tagNum"));
    if (null != tagNum && !"".equals(tagNum)) {
        sql.append("  and o.tagNum = '" + tagNum + "' ");
    }

    // 短信类型
    String type = replaceStr((String) params.get("type"));
    if (null != type && !"".equals(type)) {
        sql.append("  and  o.type = '" + type + "' ");
    }
    // 发送开始时间
    String startTime = replaceStr((String) params.get("startTime"));
    if (null != startTime && !"".equals(startTime)) {
        sql.append("  and  o.createdDate >= '" + startTime + " 00:00:00' ");
    }
    // 发送结束时间
    String endTime = replaceStr((String) params.get("endTime"));
    if (null != endTime && !"".equals(endTime)) {
        sql.append("  and  o.createdDate <= '" + endTime + " 23:59:59' ");
    }

    sql.append(" order by o.createdDate desc ");

    if (currentPage == 1) {
        sql.append(" LIMIT " + start + "," + end + " ");
    } else {
        sql.append(" LIMIT " + start + "," + length + " ");
    }

    Connection conn = null;
    PreparedStatement ptmt = null;
    ResultSet rss = null;
    Map messageMap = null;
    List<Map> list = new ArrayList<Map>();
    Page pageBean = new Page();
    try {
        conn = getOpenedConnection();
        ptmt = conn.prepareStatement(sql.toString());
        rss = ptmt.executeQuery();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        while (rss.next()) {
            messageMap = new HashMap();

            messageMap.put("id", rss.getString("o.id"));
            messageMap.put("serverNum", rss.getString("o.serverNum"));
            messageMap.put("tagNum", rss.getString("o.tagNum"));
            messageMap.put("content", rss.getString("o.content"));
            messageMap.put("msgFormat", rss.getString("o.msgFormat"));
            messageMap.put("type", rss.getString("o.type"));
            if (!"".equals(rss.getString("o.createdDate")) && null != rss.getString("o.createdDate")) {
                messageMap.put("createdDate", sdf.parse(rss.getString("o.createdDate")));
            }

            list.add(messageMap);
        }
        pageBean = new Page(currentPage, pageSize, totalPage, list, allRow);
    } catch (Exception e) {
        e.printStackTrace();
        log.error("查询短信分页信息异常" + e.getMessage(), e);
    } finally {
        JdbcManager.closeQuietly(rss);
        JdbcManager.closeQuietly(ptmt);
        closeConnection(conn);
    }
    return pageBean;
}

如果你需要在mybatis下分页,也可以看看这个博客:
https://blog.csdn.net/zhaomin_g/article/details/81190016

用limit字段 有个 beginIndex ,pageSize

参照:https://www.cnblogs.com/java-zmj/p/7886755.html

SELECT id, name, url ,country FROM websites limit 0,20 0是起始记数(从0开始),20是查询记录个数