Access数据库 实现分页查询

  • 目录
    • 说明
    • 项目的结构
    • SQL语句
    • Servlet:page.java
    • 显示页面query.jsp
    • 访问页面hello.jsp
    • 总结

目录

说明

项目环境:Eclipse+Tomcat服务器+Access数据库+servlet+jdbc驱动

项目的结构

图片:

SQL语句

分页查找的SQL语句,代码片.

String sql="select top 4 * from Histrjn where JourNo not in "+ "(select top "+(n-1)*4+" JourNo from Histrjn order by JourNo ) "+ "order by JourNo ";
//top:sql语句关键字
//4:分页中一页显示的记录条数
//Histrjn:表名
//JourNo:主键属性
//n:当前页面数
//not in:不在其中
//order by JourNo:对主键属性排序

说明:
top是分页sql语句的关键字
提醒:
1. 第一页时n=1,sql中(n-1)是0

Servlet:page.java

page.java来进行数据库分页查询,代码片.

package hello;import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;//使用注解定义Servlet
@WebServlet("/page")
public class page extends HttpServlet {private static final long serialVersionUID = 1L;Connection con;Statement st;ResultSet rs;public page() {super();}protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {try {Class.forName("com.hxtt.sql.access.AccessDriver");// jdbc数据库驱动String url = "jdbc:Access:///F:HrMS.accdb";// 数据源名称Connection con = DriverManager.getConnection(url, "", "");// 建立数据库连接对象Statement st = con.createStatement();// 获得Histrjn表中记录的总数ResultSet rs = st.executeQuery("select count(JourNo) from Histrjn");rs.next();int x = rs.getInt(1);System.out.println("总记录数:" + x);// 判断是否被平均分页,确定分页总数if (x % 4 == 0) {x = x / 4;} else {x = x / 4 + 1;}request.setAttribute("x", x);// 分页总数加入required中int n = 1;// 初始化当前页面数if (request.getParameter("n") == null) {n = 1;} else {// 从页面中获取请求页数n = Integer.parseInt(request.getParameter("n"));}// 分页查询的sql语句String sql = "select top 4 * from Histrjn where JourNo not in " + "(select top " + (n - 1) * 4+ " JourNo from Histrjn order by JourNo ) " + "order by JourNo ";rs = st.executeQuery(sql);//List<Map<String, Object>> list = page.convertList(rs);// 检验list对象,打印list内容,非必要page.viewList(list);// 获得表属性字段名Set<String> key = list.get(0).keySet();request.setAttribute("key", key);request.setAttribute("list", list);request.getRequestDispatcher("/query.jsp").forward(request, response);} catch (ClassNotFoundException | SQLException e) {e.printStackTrace();} finally {if (rs != null || st != null || con != null) {try {rs.close();st.close();con.close();} catch (SQLException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}}}protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}// 将ResultSet对象转为List<Map<String, Object>>public static List<Map<String, Object>> convertList(ResultSet rs) throws SQLException {List<Map<String, Object>> list = new LinkedList<Map<String, Object>>();ResultSetMetaData md = rs.getMetaData();int columnCount = md.getColumnCount();while (rs.next()) {// 第一个插入的为第一个map值对Map<String, Object> rowData = new LinkedHashMap<String, Object>();for (int i = 1; i <= columnCount; i++) {rowData.put(md.getColumnName(i), rs.getObject(i));}list.add(rowData);}return list;}// 检验list对象,显示list,非必要public static void viewList(List<Map<String, Object>> list) {// 遍历listIterator<Map<String, Object>> li = list.iterator();while (li.hasNext()) {// 遍历mapfor (Map.Entry<String, Object> ma : li.next().entrySet()) {System.out.print(ma.getValue() + "   ");}System.out.println("");}}}

说明:
方法public static void viewList(List<Map<String, Object>> list)是非必要的

提醒:
在map中属性的排列和数据库的顺序不同,因为map对象按照key的大小进行了排序

显示页面query.jsp

显示分页查询的页面query.jsp,使用了< c:forEach > 进行遍历,代码片.

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>显示页面</title><style type="text/css">
td {text-align: middle;text-align: center;font-size:25px;
}
</style>
</head>
<body><br><br><br><table align="center" border="1" width="1000" height="170"cellpadding="0" cellspacing="0"><tr><!-- 遍历集合对象 --><c:forEach var="ke" items="${key}"><td>${ke}</td></c:forEach></tr><!-- 嵌套遍历集合对象 --><c:forEach var="map" items="${list}"><tr><c:forEach var="me" items="${map}"><td>${me.value}</td></c:forEach></tr></c:forEach></table><br><br><div align="center"><font size="5"> 第 <!-- 循环遍历 --><c:forEach begin="1" end="${x}" var="i"><a href="page?n=${i}">${i}</a></c:forEach> 页</font></div>
</body>
</html>

说明:
1. 开启c:标签,<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core”%>。
2. 使用c:标签要引入两个包jstl.jar和standard-1.1.2.jar
3. 使用<c:forEach>遍历,配合EL表达式${},方便的输出集合内容。
4. 使用css来设置< td >的属性。

访问页面hello.jsp

代码片.

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>分页查询访问页面</title>
</head>
<body>
<a href="page" >分页查询</a>
</body>
</html>

提醒:
该页面没有设置编码方式。

总结

 1. 使用注解注册servlet,不需要对web.xml进行配置了,使用默认的就行2. 分页查询时如果id不连续,分页效果则不能完成
**引用包是最大的困难(一步一步来)**

Access数据库 实现分页查询相关推荐

  1. mysql分页查询出租房屋信息_分页查询信息(使用jdbc连接mysql数据库实现分页查询任务)...

    分页查询信息 使用jdbc连接mysql数据库实现分页查询任务 通过mysql数据库提供的分页机制,实现商品信息的分页查询功能,将查询到的信息显示到jsp页面上. 本项目时一个简单的运用eclipse ...

  2. access查询mysql_2017计算机二级Access数据库生成表查询教程

    2017计算机二级Access数据库生成表查询教程 引导语;你知道运用Access数据库如何查询生成表吗,以下是百分网小编分享给大家的2017计算机二级Access数据库生成表查询教程,欢迎阅读! 生 ...

  3. 使用oracle数据库分页查询语句,各种数据库的分页查询语句

    各种数据库的分页查询语句 1.oracle数据库分页select * from (select a.*,rownum rc from 表名 where rownum=endrow) a where a ...

  4. oracle mssql 实例,oracle,mysql,SqlServer三种数据库的分页查询的实例

    MySql: MySQL数据库实现分页比较简单,提供了 LIMIT函数.一般只需要直接写到sql语句后面就行了. LIMIT子 句可以用来限制由SELECT语句返回过来的数据数量,它有一个或两个参数, ...

  5. SQL数据库(分页查询、DCL 数据控制语言、通用函数、约束、多表查询)

    分页查询 语法 select 字段列表 from 表名 limit 起始索引,查询记录数(每页显示的条数) 注意 起始索引 从0开始, 起始索引 = (查询的页码-1)* 每页显示的记录数 1–5-0 ...

  6. oracle数据库分页查询慢,Oracle数据库中分页查询中排序及效率问题

    原始未分页查询Sql代码如下: select ROWNUM rn, t.id ID, o.name YYB,u.name XM, t.MC from tZDYSX t,tuser u,lborgani ...

  7. java oracle数据库高效分页查询_oracle高效分页查询总结

    探索查询语句: --分页参数:size = 20 page = 2 --没有order by的查询 -- 嵌套子查询,两次筛选(推荐使用) --SELECT * -- FROM (SELECT ROW ...

  8. 三种数据库sql分页查询

    关于sql分页 今天用到分页了顺便就总结了一下 mysql 数据库: mysql 中有分页的关键字limit,它可以实现分页很简单: SELECT * FROM sys_user ORDER BY u ...

  9. Access数据库的Like查询

    原文网址: http://www.china-askpro.com/msg15/qa22.shtml Q NewStar:     操作系统:PNT4.0 SP5+IIS4+Access 97     ...

最新文章

  1. python3.7源码分析-集合(set)
  2. 2019 年 CNCF 中国云原生调查报告
  3. 分分钟收入上万 她做到了网红最难的粉丝沉淀
  4. 【黑马程序员 C++教程从0到1入门编程】【笔记3】C++核心编程(内存分区模型、引用、函数提高)
  5. linux挂载分区至目录
  6. retain、strong、weak、assign区别
  7. html快速排序,快速排序.html
  8. java接口作用和好处,持续更新大厂面试笔试题
  9. Qt中echo服务器的简单编写
  10. Android NDK开发之旅25 NDK 模仿QQ变声特效
  11. ib什么意思_科普|听说邻居的孩子去了IB学校,IB具体是什么?
  12. Taurus入门,这么神奇的性能测试工具不能不知道
  13. Springboot读取application.properties文件乱码
  14. Python学习之路28-符合Python风格的对象
  15. 需求分析解决方案文案,展示图文结合的文案的视觉感。运用屏幕摄影师Snaglt实现屏幕图像文本捕获与编辑,为技术文案的编写提供素材支持。
  16. 从CSV和VCF文件中获取联系人信息
  17. 读计算机网络得学五笔吗,打破无聊难学 另类五笔学习方法
  18. 各个开发工具格式化代码的快捷键
  19. kettle 资源库 配置信息
  20. linux发行版本号列举,查看Linux发行版的名称及其版本号

热门文章

  1. Python入门-if语句
  2. 地狱模式的沪上居转户记录 01
  3. linux 指定磁盘盘符,使用udev指定盘符
  4. NYNU ACM 蓝桥杯选拔赛 解题报告
  5. 2020-04-11
  6. 使用wps表格、excel绘制方波图样
  7. DTS 宣布华硕 ROG Phone 将支持 DTS:X Ultra 技术
  8. .dwg转换为.svg
  9. dbcp连接池出现的问题情况org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory
  10. 运动会计算机学院鼓点加油视频,速度共激情,热血伴青春­­­­——记2017年春季运动会...