JDBC 分页查询:使用预处理语句实现高效数据展示
下面是一个简单的示例代码,演示了如何使用预处理语句进行分页查询,并将结果展示在 JSP 页面中。\n\n首先是实体类(PageDataEntity.java):\n\njava\npublic class PageDataEntity<T> {\n private int totalPages; \n private int pageSize; \n private int currentPage; \n private int totalDataCount; \n private List<T> currentPageDataList; \n\n // 省略getter和setter方法\n}\n\n\n接下来是DAO层的代码(DataDAO.java):\n\njava\npublic class DataDAO {\n private static final String SELECT_PAGE_DATA = "SELECT * FROM data_table LIMIT ?, ?"; \n\n public PageDataEntity<Data> getPageData(int currentPage, int pageSize) {\n Connection connection = null; \n PreparedStatement statement = null; \n ResultSet resultSet = null; \n PageDataEntity<Data> pageData = new PageDataEntity<>(); \n\n try {\n connection = getConnection(); \n statement = connection.prepareStatement(SELECT_PAGE_DATA); \n int startIndex = (currentPage - 1) * pageSize; \n statement.setInt(1, startIndex); \n statement.setInt(2, pageSize); \n resultSet = statement.executeQuery(); \n\n List<Data> dataList = new ArrayList<>(); \n while (resultSet.next()) { \n Data data = new Data(); \n // 从resultSet中获取数据并设置到data对象中 \n dataList.add(data); \n } \n\n pageData.setTotalPages(calculateTotalPages(pageSize)); \n pageData.setPageSize(pageSize); \n pageData.setCurrentPage(currentPage); \n pageData.setTotalDataCount(getTotalDataCount()); \n pageData.setCurrentPageDataList(dataList); \n } catch (SQLException e) { \n e.printStackTrace(); \n } finally { \n closeResultSet(resultSet); \n closeStatement(statement); \n closeConnection(connection); \n } \n\n return pageData; \n } \n\n private int calculateTotalPages(int pageSize) { \n // 计算总页数 \n int totalDataCount = getTotalDataCount(); \n return (totalDataCount + pageSize - 1) / pageSize; \n } \n\n private int getTotalDataCount() { \n // 查询数据总数的SQL语句 \n String countSQL = "SELECT COUNT(*) FROM data_table"; \n // 执行查询数据总数的SQL语句并返回结果 \n return 0; \n } \n\n // 省略数据库连接相关的方法 \n}\n\n\n最后是控制器层的代码(DataController.java):\n\njava\n@WebServlet("/data")\npublic class DataController extends HttpServlet {\n private DataDAO dataDAO; \n\n @Override\n public void init() throws ServletException {\n dataDAO = new DataDAO(); \n } \n\n @Override\n protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {\n int currentPage = Integer.parseInt(req.getParameter("page")); \n int pageSize = 15; // 每页的数据数量 \n\n PageDataEntity<Data> pageData = dataDAO.getPageData(currentPage, pageSize); \n req.setAttribute("pageData", pageData); \n req.getRequestDispatcher("data.jsp").forward(req, resp); \n } \n}\n\n\n在JSP页面(data.jsp)中,可以使用EL表达式来获取分页数据并展示:\n\njsp\n<c:forEach var="data" items="${pageData.currentPageDataList}">\n <!-- 在此处展示每条数据的内容 -->\n</c:forEach> \n\n<!-- 在此处展示分页导航栏,可以根据pageData的属性来生成导航栏 -->\n\n\n请注意,上述代码只是一个简单的示例,具体的实现方式可能会根据项目需求和数据库类型而有所不同。你需要根据自己的实际情况进行适当的修改和调整。
原文地址: https://www.cveoy.top/t/topic/p6p5 著作权归作者所有。请勿转载和采集!