Проблема разбиения на страницы Java print Printwriter

#java #sql #select #pagination #printwriter

Вопрос:

Я попытался выполнить разбиение на страницы на Java с помощью PrintWriter. Я использовал это в качестве модели: 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 для итога..
Результирующий набор будет иметь размер 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, результирующий набор будет иметь размер 1, но он может печатать не менее 3 элементов.

Мне нужно было бы знать, по крайней мере, точное количество элементов, которые были получены даже с ограничением 1.

Спасибо.

Комментарии:

1. @Abra да MySQL

Ответ №1:

Чтобы найти общее количество, вы можете использовать запрос количества:

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

Когда вы выполните этот запрос с тем же параметром, что и запрос данных, вы получите a 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);
}