描述

我们主要是对数据库表进行一些简单的增删改查操作,然后将内容展示在网页当中,其中主要分为

  1. 简单功能
    1. 列表查询
    2. 登录
    3. 添加
    4. 删除
    5. 修改
  2. 复杂功能
    1. 删除选中
    2. 分页查询
    3. 复杂条件查询

一、简单功能

在 对数据库表进行操作时,我们首先得进行提供数据库表的实体类

public class User {private int id;private String name;private String gender;private int age;private String address;private String qq;private String email;private String username;private String password;}

有了实体类,再提供对应的getter和setter方法和有参无参构造方法。可以根据自己需要提供自己需要的方法

1.列表查询

列表查询主要是将数据库表中所有数据全部取出,然后进行展示。
最后展示界面应该为下图

实现列表查询的servlet代码

当我们得到了信息集合后我们需要将它存入request域中,然后转发到jsp页面中。
jsp的显示页面的代码如下:

<form action="${pageContext.request.contextPath}/deleteSelectedServlet" id="form" method="post"><table border="1" class="table table-bordered table-hover"><tr class="success"><th><input type="checkbox" id="firstCB"></th><th>编号</th><th>姓名</th><th>性别</th><th>年龄</th><th>籍贯</th><th>QQ</th><th>邮箱</th><th>操作</th></tr><c:forEach items="${pageBean.list}" var="user" varStatus="s"><tr><td><input type="checkbox" id="cb" value="${user.id}" name="userId"></td><td>${s.count}</td><td>${user.name}</td><td>${user.gender}</td><td>${user.age}</td><td>${user.address}</td><td>${user.qq}</td><td>${user.email}</td><td><a class="btn btn-default btn-sm" href="${pageContext.request.contextPath}/findUserServlet?id=${user.id}">修改</a>&nbsp;<a class="btn btn-default btn-sm" href="javascript:deleteUser(${user.id});">删除</a></td></tr></c:forEach></table></form>

登录

登录界面展示

当我们登录时需要输入正确的账号、密码和验证码才能成功登录,我们首先验证输入验证码是否输入正确,输入正确则去判断账号密码是否正确,这样可以减低数据访问的时间。
登录界面代码

 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置编码request.setCharacterEncoding("utf-8");//获取输入的验证码String verifycode = request.getParameter("verifycode");//比较验证码是否正确HttpSession session = request.getSession();String checkcode_server = (String) session.getAttribute("CHECKCODE_SERVER");session.removeAttribute("CHECKCODE_SERVER");if (verifycode.equalsIgnoreCase(checkcode_server)){//验证码正确//获取所有参数Map<String, String[]> map = request.getParameterMap();//封装对象User loginUser = new User();try {BeanUtils.populate(loginUser,map);} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}//调用service查询UserService userService=new UserServiceimpl();User loginUser1 = userService.loginUser(loginUser);if (loginUser1!=null){//登录成功//将用户存入sessionsession.setAttribute("loginUser",loginUser1);//重定向页面response.sendRedirect(request.getContextPath()+"/index.jsp");}else {//登录失败//记录错误信息request.setAttribute("login_error","账号或密码错误!");//转发到登录界面request.getRequestDispatcher("/login.jsp").forward(request,response);}}else {//验证码错误//存入错误信息request.setAttribute("login_error","验证码错误!");//转发页面request.getRequestDispatcher("/login.jsp").forward(request,response);}}

添加

添加页面展示

我们输入对应的信息,然后点击提交,后台将所有信息提取然后在通过sql语句在数据库中进行信息添加
代码如下

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置编码request.setCharacterEncoding("utf-8");//获取所有信息Map<String, String[]> map = request.getParameterMap();//封装User addUser = new User();try {BeanUtils.populate(addUser,map);} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}//调用serviceUserService userService=new UserServiceimpl();int count = userService.addUser(addUser);if (count!=0){//添加成功,跳转到UserListServletresponse.sendRedirect(request.getContextPath()+"/findUserByPageServlet");}}

逻辑分析图

删除

删除有两种删除方式,一个是通过列表查询的删除按钮删除一条记录,另一个这是通过选项框选择多个用户然后删除选中的记录
删除单个记录

点击删除按钮时,直接调用我们创建的方法deleteUser(${user.id})将当前记录的id传入当参数

function deleteUser(id) {if (confirm("确定要删除吗?")){location.href="${pageContext.request.contextPath}/userDeleteServlet?id="+id;}}

然后将id直接以后缀形式传入删除的servlet进行操作。

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置编码request.setCharacterEncoding("utf-8");//获取idString id = request.getParameter("id");//调用service删除UserService userService=new UserServiceimpl();int count = userService.deleteUser(id);if (count!=0){response.sendRedirect(request.getContextPath()+"/findUserByPageServlet?");}}

逻辑分析图

删除选中
通过获取checkbox的状态获取是否选中状态,然后进行删除

document.getElementById("delSelected").onclick=function () {if (confirm("您确定要删除所有选中的信息吗?")){var flag=false;//获取所有的cbvar cbs = document.getElementsByName("userId");for (var i=0;i<cbs.length;i++){//判断是否有sb被选中if (cbs[i].checked){flag=true;break;}}if (flag){//提交表单document.getElementById("form").submit();}else {alert("您当前没有选中的信息!");}}}

删除的servlet的代码和删除一条记录的代码相同
逻辑分析图

修改

修改界面的展示

修改的操作和前面的操作都大相径庭,最主要的是我们点击修改后需要实现一个数据回显的操作

当点击修改时将id以后缀的形式一起传入查询记录的servlet中,然后将查询到的记录存入request域中,然后在jsp页面中在对应的文本框中设置value属性,将对应值展示出来,这样就实现了数据的回显

逻辑分析图

复杂功能

分页查询和复杂条件查询

分页查询主要是将查询出的数据以多页的形式展示出来
分页查询的页面逻辑图

具体实现代码逻辑图

所有我们要实现分页是还需要一个对应的实体类,热庵后提供对应的getter和setter方法还有构造方法

public class PageBean<T> {private int totalCount;//总记录数private int totalPage;//总页码数private List<T> list;//每页显示的数据private int currentPage;//当前页码private int rows;//每页显示的数据条数}

页码的代码

<div><nav aria-label="Page navigation"><ul class="pagination"><c:if test="${pageBean.currentPage==1}"><li class="disabled"></c:if><c:if test="${pageBean.currentPage!=1}"><li></c:if><a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${pageBean.currentPage-1}&rows=5&name=${map.name[0]}&address=${map.address[0]}&email=${map.email[0]}" aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li><c:forEach begin="1" end="${pageBean.totalPage}" var="i"><c:if test="${pageBean.currentPage==i}"><li class="active"><a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${i}&rows=5&name=${map.name[0]}&address=${map.address[0]}&email=${map.email[0]}">${i}</a></li></c:if><c:if test="${pageBean.currentPage!=i}"><li ><a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${i}&rows=5&name=${map.name[0]}&address=${map.address[0]}&email=${map.email[0]}">${i}</a></li></c:if>
<%--                    <li><a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${i}&rows=5">1</a></li>--%></c:forEach><c:if test="${pageBean.currentPage==pageBean.totalPage}"><li class="disabled"></c:if><c:if test="${pageBean.currentPage!=pageBean.totalPage}"><li></c:if><a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${pageBean.currentPage+1}&rows=5&name=${map.name[0]}&address=${map.address[0]}&email=${map.email[0]}" aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li><span style="font-size: 25px;margin-left: 5px;">共${pageBean.totalCount}条记录,共${pageBean.totalPage}页</span></ul></nav></div>

servlet中主要是获取对应的值

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置编码request.setCharacterEncoding("utf-8");//获取参数String currentPage = request.getParameter("currentPage");//获取当前页码String rows = request.getParameter("rows");//获取每页显示条数if (currentPage==null||"".equals(currentPage)){currentPage="1";}if (rows==null||"".equals(rows)){rows="5";}//获取条件查询的参数Map<String, String[]> map = request.getParameterMap();//调用service查询总记录数UserService userService=new UserServiceimpl();PageBean<User> pageBean = userService.findUserByPage(currentPage, rows,map);//将pageBean存入requestrequest.setAttribute("pageBean",pageBean);//将查询数据存入requestrequest.setAttribute("map",map);//转发到list。jsprequest.getRequestDispatcher("/list.jsp").forward(request,response);}

在servlce中对分页实体类的各个变量进行赋值

public PageBean<User> findUserByPage(String _currentPage, String _rows, Map<String, String[]> map) {//数据类型转换int currentPage = Integer.parseInt(_currentPage);int rows = Integer.parseInt(_rows);if (currentPage<=0){currentPage=1;}//创建PageBean对象PageBean<User> pageBean = new PageBean<>();//设置参数pageBean.setRows(rows);//调用dao查询总记录数int totalCount = userDao.findTotalCount(map);pageBean.setTotalCount(totalCount);//设置总页码数int totalPage=(totalCount%rows)==0 ?(totalCount/rows):(totalCount/rows)+1;if (currentPage>totalPage){currentPage=totalPage;}//查询list集合//计算开始索引pageBean.setCurrentPage(currentPage);int start=(currentPage-1)*rows;List<User> list = userDao.findByPage(start, rows,map);pageBean.setList(list);pageBean.setTotalPage(totalPage);return pageBean;}

然后再将所有的数据通过jsp页面的代码展示在页面。
复杂条件查询
逻辑图

我们也是通过分页查询的代码来进行优化所得到结果上述代码就是最终代码。

网页实现数据库表信息的CRUD操作相关推荐

  1. MongoDB 实战教程:数据库与集合的 CRUD 操作篇

    你好,我是悦创. 公众号:AI悦创 简介 MongoDB 是非关系型数据库(NoSQL)的代表之一,它具有高灵活.可水平扩展.高可用等优秀特性,并且它提供了强大又丰富的查询语句使开发者能够随心所欲地操 ...

  2. mysql数据库实验查询_MySQL数据库表数据的查询操作实验

    实验3.MySQL数据库表数据的查询操作实验(1) 一.实验目的 掌握SELECT 语句的基本语法格式. 掌握SELECT 语句的执行方法. 掌握SELECT 语句的 GROUP BY 和 ORDER ...

  3. java 导出word换行_Java 导出数据库表信息生成Word文档

    一.前言 最近看见朋友写了一个导出数据库生成word文档的业务,感觉很有意思,研究了一下,这里也拿出来与大家分享一波~ 先来看看生成的word文档效果吧 下面我们也来一起简单的实现吧 二.Java 导 ...

  4. Android Studio开发(四)SQLite数据库的DAO标准CRUD操作模拟微信通讯录

    Android Studio开发(四)SQLite数据库的DAO标准CRUD操作模拟微信通讯录 Android Studio开发(四)SQLite数据库的DAO标准CRUD操作模拟微信通讯录 一.任务 ...

  5. 导出数据库表信息生成Word文档(数据字典)

    平时多积累一些好工具,才能提高工作效率,早点下班 1. 关键字百度 Java 导出数据库表信息生成Word文档 gitee地址 2.拉取,运行 2.1 idea识别.导入maven工具 2.2 下载完 ...

  6. 导出数据库表信息生成Word文档

    一.背景描述 系统上线或者交付,或者需要提供整理数据库表信息,如果一个个整理未免麻烦,接下来一个demo示例如何用JAVA导出Mysql数据库表信息生成Word文档. 1.项目源码地址:https:/ ...

  7. Java 导出数据库表信息生成Word文档

    一.前言 最近看见朋友写了一个导出数据库生成word文档的业务,感觉很有意思,研究了一下,这里也拿出来与大家分享一波~ 先来看生成word文档效果吧 下面我们也来一起简单的实现吧 二.Java 导出数 ...

  8. 数据库 SQL 语言 基础CRUD操作

    SQL 语言 1. 概括 ​ SQL:Structure Query Language(结构化查询语言),SQL被美国国家标准局(ANSI)确定为关 系型数据库语言的美国标准,后来被国际化标准组织(I ...

  9. jdbc元数据DataBaseMetaData查询数据库表信息详解

    使用jdbc驱动的元数据metaData获取指定数据库的表信息和表字段信息. 测试请求:http://localhost:30001/api/tableInfoQuery/queryTableInfo ...

  10. clodera scm 数据库表信息 和 hive元数据整理

    一. cloudera 会将页面的数据存储到 SCM 中 其表结构梳理(对应生产BAOFOO_SCM) AUDITS 登录信息.服务,角色重启.配置更改 PROCESSES 进程信息.这里面有很多信息 ...

最新文章

  1. Linux下搭建jenkins+svn+http+maven自动化部署
  2. XV6850成功刷机步骤
  3. ICPR 2020国际学术竞赛:大规模无噪声精细商品图像识别
  4. 调用支付jsapi缺少参数:total_fee_小程序支付问题怎么解决?
  5. Linux进程全解9——进程状态、system函数、进程间的关系
  6. 《Python编程从入门到实践》记录之range、min、max、sum函数
  7. Python不能做游戏?游戏实战之-----《ink spill》(附游戏完整源码)
  8. PMP第六版5大过程组49个过程
  9. Caliburn.Micro WPF教程——入门
  10. cad2016批量修改相关字体,统一文字样式
  11. 解决element 表单验证不通过的俩大坑
  12. 【RTD】铂电阻测温原理与具体方法
  13. 你今天真好看中文扫描版
  14. Win10彻底删除蓝牙设备
  15. LinkedList底层链表结构
  16. webstorm11 破解办法
  17. 采集日志实践-ELK以及filebeat配置解析
  18. lcy mysql爆破_mysql
  19. Unity UI抗锯齿测试
  20. 智慧物流园区供应链系统解决方案:赋能物流运输行业供应链新模式

热门文章

  1. vp9 segment 详细分析
  2. Hierachy View使用
  3. 40家重污染行业上市公司进“黑名单”
  4. 局域网中文件共享方案介绍(Win10版)
  5. MySql分页查询limit
  6. 简单分析系统开机时间
  7. 海康摄像头监控预览二开,萤石云对接说明
  8. 装饰工程预算软件测试自学,学预算要多久能学出来 预算没人带怎么自学
  9. vue面试题自我介绍
  10. 【博学谷学习记录】超强总结,用心分享 | 产品经理电商项目知识点总结与回顾