以下是一个使用预处理语句进行分页查询的示例代码:\n\n1. 实体类(PageData):\n\njava\npublic class PageData&lt;T&gt; {\n private int totalPages; // 总页数\n private int pageSize; // 每页存放的数据数量\n private int currentPage; // 当前页数\n private int totalRecords; // 数据总数\n private List&lt;T&gt; currentPageDataList; // 当前页面的数据\n private int startIndex; // 每页的起始下标\n private int endIndex; // 每页的结束下标\n\n // 省略构造方法和getter、setter方法\n}\n\n\n2. DAO层:\n\njava\npublic class YourDAO {\n private static final int PAGE_SIZE = 3; // 每页存放的数据数量\n\n public PageData&lt;YourEntity&gt; getPageData(int pageNumber) throws SQLException {\n Connection connection = null;\n PreparedStatement statement = null;\n ResultSet resultSet = null;\n PageData&lt;YourEntity&gt; pageData = new PageData&lt;&gt;();\n\n try {\n connection = getConnection(); // 获取数据库连接\n\n // 查询数据总数\n statement = connection.prepareStatement("SELECT COUNT(*) FROM your_table_name");\n resultSet = statement.executeQuery();\n if (resultSet.next()) {\n int totalRecords = resultSet.getInt(1);\n pageData.setTotalRecords(totalRecords);\n int totalPages = (int) Math.ceil((double) totalRecords / PAGE_SIZE);\n pageData.setTotalPages(totalPages);\n }\n resultSet.close();\n statement.close();\n\n // 计算每页的起始下标和结束下标\n int startIndex = (pageNumber - 1) * PAGE_SIZE;\n int endIndex = startIndex + PAGE_SIZE;\n\n // 分页查询数据\n statement = connection.prepareStatement("SELECT * FROM your_table_name LIMIT ?, ?");\n statement.setInt(1, startIndex);\n statement.setInt(2, PAGE_SIZE);\n resultSet = statement.executeQuery();\n List&lt;YourEntity&gt; currentPageDataList = new ArrayList&lt;&gt;();\n while (resultSet.next()) {\n YourEntity entity = new YourEntity();\n // 从resultSet中取出数据并设置到entity中\n // entity.setName(resultSet.getString("name"));\n // entity.setAge(resultSet.getInt("age"));\n // ...\n currentPageDataList.add(entity);\n }\n pageData.setCurrentPageDataList(currentPageDataList);\n pageData.setStartIndex(startIndex);\n pageData.setEndIndex(endIndex);\n } finally {\n // 关闭数据库连接、statement和resultSet\n if (resultSet != null) {\n resultSet.close();\n }\n if (statement != null) {\n statement.close();\n }\n if (connection != null) {\n connection.close();\n }\n }\n\n return pageData;\n }\n\n private Connection getConnection() throws SQLException {\n // 获取数据库连接\n // ...\n }\n}\n\n\n3. Servlet层:\n\njava\npublic class YourServlet extends HttpServlet {\n private YourDAO yourDAO;\n\n @Override\n public void init() throws ServletException {\n super.init();\n yourDAO = new YourDAO();\n }\n\n protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {\n int pageNumber = Integer.parseInt(request.getParameter("page"));\n\n try {\n PageData&lt;YourEntity&gt; pageData = yourDAO.getPageData(pageNumber);\n request.setAttribute("pageData", pageData);\n request.getRequestDispatcher("your-jsp.jsp").forward(request, response);\n } catch (SQLException e) {\n e.printStackTrace();\n // 处理异常\n }\n }\n}\n\n\n4. JSP页面(your-jsp.jsp):\n\njsp\n<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>\n<!DOCTYPE html>\n<html>\n<head>\n <meta charset="UTF-8">\n <title>分页查询结果</title>\n</head>\n<body>\n <h1>分页查询结果</h1>\n\n <table>\n <thead>\n <tr>\n <th>字段1</th>\n <th>字段2</th>\n <!-- ... -->\n </tr>\n </thead>\n <tbody>\n <%\n PageData&lt;YourEntity&gt; pageData = (PageData&lt;YourEntity&gt;) request.getAttribute("pageData");\n List&lt;YourEntity&gt; currentPageDataList = pageData.getCurrentPageDataList();\n for (YourEntity entity : currentPageDataList) {\n %>\n <tr>\n <td><%= entity.getField1() %></td>\n <td><%= entity.getField2() %></td>\n <!-- ... -->\n </tr>\n <%\n }\n %>\n </tbody>\n </table>\n\n <div>\n <% int currentPage = pageData.getCurrentPage(); %>\n <% int totalPages = pageData.getTotalPages(); %>\n <% int startIndex = pageData.getStartIndex(); %>\n <% int endIndex = pageData.getEndIndex(); %>\n <% int totalRecords = pageData.getTotalRecords(); %>\n\n <% if (currentPage > 1) { %>\n <a href="?page=<%= currentPage - 1 %>">上一页</a>\n <% } %>\n\n <% for (int i = startIndex; i < endIndex; i++) { %>\n <% int pageNumber = i + 1; %>\n <% if (pageNumber <= totalPages) { %>\n <% if (pageNumber == currentPage) { %>\n <%= pageNumber %>\n <% } else { %>\n <a href="?page=<%= pageNumber %>"><%= pageNumber %></a>\n <% } %>\n <% } %>\n <% } %>\n\n <% if (currentPage < totalPages) { %>\n <a href="?page=<%= currentPage + 1 %>">下一页</a>\n <% } %>\n\n <p>共 <%= totalPages %> 页,<%= totalRecords %> 条记录</p>\n </div>\n</body>\n</html>\n\n\n以上代码实现了通过Servlet调用DAO层的分页查询方法,并将查询结果传递到JSP页面进行展示。在JSP页面中,通过获取request中的PageData对象,可以获取到当前页的数据列表以及分页相关的信息。在JSP页面中使用JSP脚本语法可以循环展示每条数据,并通过分页链接实现翻页功能。

Java JDBC 分页查询实现 - 使用预处理语句、Servlet 和 JSP

原文地址: https://www.cveoy.top/t/topic/p6pX 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录