首页 > 解决方案 > Java分页问题打印Printwriter

问题描述

我尝试使用 PrintWriter 在 Java 中进行分页。我用这个作为模型:https ://www.javatpoint.com/pagination-in-servlet 。正如您在示例代码中看到的那样,为了处理 3 页和每页 5 个元素,完成了代码。

        out.print("<a href='ViewServlet?page=1'>1</a> ");  
        out.print("<a href='ViewServlet?page=2'>2</a> ");  
        out.print("<a href='ViewServlet?page=3'>3</a> ");

int total=5; 我认为复制我的所有代码没有任何意义,因为从数据库中读取是可行的。我只想在每个页面上有 1 个元素,并且找到与元素一样多的页面。所以我用

String query = "select * from tabL where name like CONCAT( '%',?,'%') limit "
                    + (start-1)+","+total;

开始为 1,总计为 1.. ResulSet 的大小为 1,但如果我使用它

    out.print("<a href='ViewServlet?page=1'>1</a> ");  
    out.print("<a href='ViewServlet?page=2'>2</a> ");  
    out.print("<a href='ViewServlet?page=3'>3</a> ");

它也打印其他元素。因此,请帮助如何才能找到与元素一样多的页面,并且每页有 1 个元素。

我是否需要无限制地选择并使用由此获得的结果集的大小,是否有更好的解决方案?

PS:有人请解释我如何限制 1,1 ResulSet 的大小为 1 但它至少可以打印 3 个元素。

即使限制为 1,我至少需要知道检索到的元素的确切数量。

谢谢你。

标签: javasqlselectpaginationprintwriter

解决方案


要查找总计数,您可以使用计数查询:

String countQuery = "select count(*) from tabL where name like CONCAT( '%',?,'%')";

当您使用与数据查询相同的参数执行此查询时,您将获得ResultSet一行一列的数据。

您可以使用

Connection con = ...; // you probably already have a Connection
PreparedStatement ps = con.prepareStatement(countQuery);
ps.setString(1, name); // the name pattern that you're searching for
ResultSet rs = ps.executeQuery();
int count = 0;
if (rs.next()) {
    count = rs.getInt(1);
}

推荐阅读