#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);
}