Ajax实现动态及时刷新表格数据

大家好,我是雄雄,今天分享的技术很简单,即ajax结合jdbc动态实现及时刷新表单数据。

前言:相信大家在网上冲浪的时候,肯定会发现这样的场景,在实现某个查询功能时,下方表格中会显示需要展示的结果,当查询条件换掉之后,数据表格中显示的信息也会及时更新,今天,我们就来实现一下这样的功能。

效果图如下所示:

数据库:mysql

开发编辑器:myeclipse

浏览器:chrome

采用java三层架构分层开发,首先我们先来看看数据库的表结构:

Emp表:

Dept表:

接下来就是按照表结构写实体类,代码如下:

Emp实体类:

package org.entity;public class Emp {private int eid;private String ename;private String epass;private int edid;private Dept dept;public Dept getDept() {return dept;}public void setDept(Dept dept) {this.dept = dept;}public int getEid() {return eid;}public void setEid(int eid) {this.eid = eid;}public String getEname() {return ename;}public void setEname(String ename) {this.ename = ename;}public String getEpass() {return epass;}public void setEpass(String epass) {this.epass = epass;}public int getEdid() {return edid;}public void setEdid(int edid) {this.edid = edid;}public Emp( String ename, String epass, int edid) {super();this.ename = ename;this.epass = epass;this.edid = edid;}public Emp(){}}

Dept实体类:

package org.entity;public class Emp {private int eid;private String ename;private String epass;private int edid;private Dept dept;public Dept getDept() {return dept;}public void setDept(Dept dept) {this.dept = dept;}public int getEid() {return eid;}public void setEid(int eid) {this.eid = eid;}public String getEname() {return ename;}public void setEname(String ename) {this.ename = ename;}public String getEpass() {return epass;}public void setEpass(String epass) {this.epass = epass;}public int getEdid() {return edid;}public void setEdid(int edid) {this.edid = edid;}public Emp( String ename, String epass, int edid) {super();this.ename = ename;this.epass = epass;this.edid = edid;}public Emp(){}}

连接数据库所需的BaseDao:

package org.entity;public class Emp {private int eid;private String ename;private String epass;private int edid;private Dept dept;public Dept getDept() {return dept;}public void setDept(Dept dept) {this.dept = dept;}public int getEid() {return eid;}public void setEid(int eid) {this.eid = eid;}public String getEname() {return ename;}public void setEname(String ename) {this.ename = ename;}public String getEpass() {return epass;}public void setEpass(String epass) {this.epass = epass;}public int getEdid() {return edid;}public void setEdid(int edid) {this.edid = edid;}public Emp( String ename, String epass, int edid) {super();this.ename = ename;this.epass = epass;this.edid = edid;}public Emp(){}}

接着,就是Dao层接口,IEmpDao:

package org.entity;public class Emp {private int eid;private String ename;private String epass;private int edid;private Dept dept;public Dept getDept() {return dept;}public void setDept(Dept dept) {this.dept = dept;}public int getEid() {return eid;}public void setEid(int eid) {this.eid = eid;}public String getEname() {return ename;}public void setEname(String ename) {this.ename = ename;}public String getEpass() {return epass;}public void setEpass(String epass) {this.epass = epass;}public int getEdid() {return edid;}public void setEdid(int edid) {this.edid = edid;}public Emp( String ename, String epass, int edid) {super();this.ename = ename;this.epass = epass;this.edid = edid;}public Emp(){}}

接口实现类EmpDaoImpl:

package org.dao.impl;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;import org.dao.BaseDao;
import org.dao.IEmpDao;
import org.entity.Dept;
import org.entity.Emp;import com.sun.corba.se.spi.orbutil.fsm.Guard.Result;public class EmpDaoImpl implements IEmpDao {private Connection conn;private PreparedStatement p;private ResultSet rs;BaseDao base = new BaseDao();@Overridepublic int addEmp(Emp emp) {String sql = "insert into Emp(ename,epass,edid) values(?,?,?);";List<Object> prama = new ArrayList<Object>();prama.add(emp.getEname());prama.add(emp.getEpass());prama.add(emp.getEdid());int rel = 0;try {rel = base.ExecuteUpdate(sql, prama);} catch (SQLException e) {e.printStackTrace();}finally{base.closeConn(conn, p, rs);}return rel;}//查询全部@Overridepublic List<Emp> findEmpAll() {String sql = "SELECT * FROM emp ,dept WHERE emp.edid = dept.did";List<Emp> eList = new ArrayList<Emp>();try {rs = base.ExecuteQuery(sql, null);while(rs.next()){Emp emp = new Emp();emp.setEid(rs.getInt("eid"));emp.setEname(rs.getString("ename"));emp.setEpass(rs.getString("epass"));emp.setEdid(rs.getInt("edid"));Dept dept = new Dept();dept.setDid(rs.getInt("did"));dept.setDname(rs.getString("dname"));emp.setDept(dept);eList.add(emp);}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{base.closeConn(conn, p, rs);}return eList;}@Overridepublic int delEmp(int eid) {String sql = "delete from emp where eid = ?;";List<Object> prama = new ArrayList<Object>();prama.add(eid);int rel = 0;try {rel = base.ExecuteUpdate(sql, prama);} catch (SQLException e) {e.printStackTrace();}finally{base.closeConn(conn, p, rs);}return rel;}@Overridepublic Emp findEmpByName(String name) {String sql = "select * from Emp where ename =?";List<Object> pa= new ArrayList<Object>();pa.add(name);Emp emp = new Emp();try {rs = base.ExecuteQuery(sql, pa);while(rs.next()){emp.setEid(rs.getInt("eid"));emp.setEname(rs.getString(2));emp.setEpass(rs.getString(3));emp.setEdid(rs.getInt("edid"));}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{base.closeConn(conn, p, rs);}return emp;}//根据部门编号查询@Overridepublic List<Emp> findEmpByDid(int edid) {List<Emp> empList = new ArrayList<Emp>();List<Object> param = new ArrayList<Object>();String sql = null;if(edid!=0){sql = "SELECT * FROM emp ,dept WHERE emp.edid = dept.did and edid = ?";param.add(edid);}else{sql = "SELECT * FROM emp ,dept WHERE emp.edid = dept.did";}try {rs = base.ExecuteQuery(sql, param);while(rs.next()){Emp emp = new Emp();emp.setEid(rs.getInt("eid"));emp.setEname(rs.getString("ename"));emp.setEpass(rs.getString("epass"));emp.setEdid(rs.getInt("edid"));Dept dept = new Dept();dept.setDid(rs.getInt("did"));dept.setDname(rs.getString("dname"));emp.setDept(dept);empList.add(emp);}} catch (SQLException e) {e.printStackTrace();}finally{base.closeConn(conn, p, rs);}return empList;}}

Service层接口IEmpService:

package org.service;import org.dao.IEmpDao;public interface IEmpService extends IEmpDao {}

Service层实现类:EmpServiceImpl:

package org.service.impl;import java.util.List;import org.dao.IEmpDao;
import org.dao.impl.EmpDaoImpl;
import org.entity.Emp;
import org.service.IEmpService;public class EmpServiceImpl implements IEmpService {IEmpDao empDao = new EmpDaoImpl();@Overridepublic int addEmp(Emp emp) {return empDao.addEmp(emp);}@Overridepublic List<Emp> findEmpAll() {// TODO Auto-generated method stubreturn empDao.findEmpAll();}@Overridepublic int delEmp(int eid) {// TODO Auto-generated method stubreturn empDao.delEmp(eid);}@Overridepublic Emp findEmpByName(String name) {// TODO Auto-generated method stubreturn empDao.findEmpByName(name);}@Overridepublic List<Emp> findEmpByDid(int edid) {return empDao.findEmpByDid(edid);}}

主要内容在前台jsp页面,我们先来写一个下拉列表,用来存放Dept表中的所有部门名称,当加载该jsp页面时,先从数据库中查询所有部门名称,然后通过jstl遍历至下拉列表中。代码如下:

<%IEmpService empService = new EmpServiceImpl();List<Emp> empList = empService.findEmpAll();request.setAttribute("empList", empList);IDeptService deptService = new DeptServiceImpl();List<Dept> deptList = deptService.findAllDept();request.setAttribute("deptList", deptList);%>
部门编号:<!-- <input type="text" name="edid"/> --><select id="deptid"><option value="0">全部</option><c:forEach items="${deptList }" var="dept"><option value="${dept.did }">${dept.dname }</option></c:forEach></select><input type="button" id="serch" value="查询"/>

当点击查询按钮时,通过ajax去Servlet中,根据部门编号查询员工信息,在回调函数(success)中处理返回的json数据,遍历动态添加至表格中。

“查询”按钮 的点击事件:

//点击查询查询值$("#serch").click(function(){//获取部门编号//var edid = $("input[name='edid']").val();//获取下拉列表中的值var edid = $("#deptid").val();var data = {"edid":edid,"tag":"getEmpByEdid"};$.getJSON("EmpServlet",data,function(data){$("#dataTable").html("<tr><td>编号</td><td>姓名</td><td>密码</td><td>部门编号</td><td>操作</td></tr>");for(var i in data){//给表格中添加数据$("#dataTable").append("<tr><td>"+data[i].eid+"</td><td>"+data[i].ename+"</td><td>"+data[i].epass+"</td><td>"+data[i].dept.dname+"</td><td><a href='EmpServlet?tag=del&eid="+data[i].eid+"'>删除</a></td></tr>");}});});

数据表格的代码:

<table border="1" id="dataTable"><tr><td>编号</td><td>姓名</td><td>密码</td><td>部门名称</td><td>操作</td></tr><c:forEach items="${empList }" var="emp"><tr><td>${emp.eid }</td><td>${emp.ename }</td><td>${emp.epass}</td><td>${emp.dept.dname}</td><td><a href="EmpServlet?tag=del&eid=${emp.eid }">删除</a></td></tr>  </c:forEach></table>

Servlet类中关键代码:

//根据部门编号查询信息public void getEmpByEdid(HttpServletRequest request, HttpServletResponse response) throws IOException{Integer edid = Integer.parseInt(request.getParameter("edid"));List<Emp> emplist = empService.findEmpByDid(edid);String jsonresult = JSON.toJSONString(emplist);System.out.println(jsonresult);PrintWriter out = response.getWriter();out.print(jsonresult);}

基本思路就是这样的,怎么样,是不是很简单?

需要辣椒酱的可以在小商店中直接下单哦~

往期精彩

相比学习好的学生,老师最喜欢努力认真学习的学生

2020-12-12

小课堂?小视频?小商店?

2020-12-11

什么样的事才是有意义的

2020-12-10

如何实现省市关联的下拉列表

2020-12-09

点分享

点点赞

点在看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/324449.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

扩展entity framework core实现默认字符串长度,decimal精度,entity自动注册和配置

文章以efcore 2.0.0-preview2.测试验证通过。其他版本不保证使用&#xff0c;但是思路不会差太远。源代码,报道越短&#xff0c;事情越严重&#xff01;文章越短&#xff0c;内容越精悍&#xff01; 目标&#xff1a;1.实现entity的自动发现和mapper设置.2.默认字符串长度&…

上机不会做?在讲台上做做试试!

上周四班上到了sql语句的查询&#xff0c;正好临近周末&#xff0c;于是就在周末的时候布置了几个增删改查的案例让回家做做。今天随便找了几个人上黑板上做&#xff0c;本以为都没有问题了呢&#xff0c;结果做的一塌糊涂……惨&#xff0c;太惨了&#xff01;当时我就在想&am…

ASP.NET Core API 版本控制

几天前&#xff0c;我和我的朋友们使用 ASP.NET Core 开发了一个API &#xff0c;使用的是GET方式&#xff0c;将一些数据返回到客户端 APP。我们在前端进行了分页&#xff0c;意味着我们将所有数据发送给客户端&#xff0c;然后进行一些data.length操作&#xff0c;以获得item…

mybatis环境搭建步骤(含配置文件代码)

1.创建web项目2.将所需要的jar包放在项目内&#xff0c;并且build-path3.创建资源文件夹resources4.在资源文件夹中创建xml文件mybatis-config.xml,文件代码如下&#xff1a;<?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE configurationPUB…

多久没有给家里打过电话了?

你多久没有给家里打过电话了&#xff1f;对于我这种常年在外&#xff0c;且工作地距家直线距离都有数百公里的人来说&#xff0c;回家可是一种极大的奢侈啊。貌似自从在济南上班以来&#xff0c;平均每年也就有空回去两次&#xff0c;第一次一般都是有急事需要赶紧赶回去&#…

Feign数据压缩传输

没使用之前 使用 使用之后

漫画:删去k个数字后的最小值

转载自 漫画&#xff1a;删去k个数字后的最小值 我们来举一个栗子&#xff1a; 给定整数 541270936&#xff0c;要求删去一个数&#xff0c;让剩下的整数尽可能小。 此时&#xff0c;无论删除哪一个数字&#xff0c;最后的结果都是从9位整数变成8位整数。既然同样是8位整数&…

使用 InSpec 实现符合性即代码

法规符合性是每个企业必须面对的一个现实问题。同时&#xff0c;随着改变业界格局的新技术以及客户对数字服务的期望的出现&#xff0c;竞争压力也随之增加。各行业能否在快速交付新产品和服务的同时&#xff0c;仍然履行法规符合性义务&#xff1f; 回答是肯定的。解决方案就是…

计算机专业毕业后能做什么工作?

众所周知&#xff0c;目前比较火的专业之一莫过于计算机专业了。在这个互联网时代&#xff0c;越来越多的人选择去学习计算机专业&#xff0c;可是你知道计算机专业毕业后都有哪些岗位可选择吗&#xff1f;各个岗位的工作任务主要是什么&#xff1f;以下是对于计算机专业中各个…

什么是 binlog

转载自 什么是 binlog 引言 为什么写这篇文章? 大家当年在学MySQL的时候&#xff0c;为了能够迅速就业&#xff0c;一般是学习一下MySQL的基本语法&#xff0c;差不多就出山找工作了。水平稍微好一点的童鞋呢还会懂一点存储过程的编写&#xff0c;又或者是懂一点索引的创建…

[信息安全] 4.一次性密码 amp;amp;amp;amp; 身份认证三要素

在信息安全领域&#xff0c;一般把Cryptography称为密码&#xff0c;而把Password称为口令。日常用户的认知中&#xff0c;以及我们开发人员沟通过程中&#xff0c;绝大多数被称作密码的东西其实都是Password&#xff08;口令&#xff09;&#xff0c;而不是真正意义上的密码。…

干货!sqlserver数据库所有知识点总结整理,含代码(挺全的)

01T-SQL案例整理已知有一个表&#xff1a;该表的字段有&#xff1a;id,name,date,gradeid,email&#xff0c;表名为table_name,按要求实现下面内容。1.插入一条记录&#xff1a;insert into table_name values (1,刘世豪,2017-10-21,1,666qq.com)2.将学号是1的学生姓名修改成张…

深入源码分析Java线程池的实现原理

转载自 深入源码分析Java线程池的实现原理 程序的运行&#xff0c;其本质上&#xff0c;是对系统资源&#xff08;CPU、内存、磁盘、网络等等&#xff09;的使用。如何高效的使用这些资源是我们编程优化演进的一个方向。今天说的线程池就是一种对CPU利用的优化手段。 网上有…

“桌面日历”记录的事件居然是看某某视频……

某年某月某下午&#xff0c;正在激情澎湃的在讲台上讲课&#xff0c;忽发现医学生缓缓的将右手举起来&#xff0c;见状&#xff0c;不用想&#xff0c;他一定有问题&#xff0c;嗯……要问我。于是&#xff0c;紧走几步下去&#xff0c;问他怎么了&#xff0c;他说他的某某功能…

开源个.NetCore写的 - 并发请求工具PressureTool

本篇和大家分享的是一个 并发请求工具&#xff0c;并发往往代表的就是压力&#xff0c;对于一些订单量比较多的公司这种情况很普遍&#xff0c;也因此出现了很多应对并发的解决方案如&#xff1a;分布式&#xff0c;队列&#xff0c;数据库锁等&#xff1b; 对于没有遇到过或者…

浅析DNS域名解析过程

转载自 浅析DNS域名解析过程 对于每一个HTTP请求发起过程中&#xff0c;都有很重要的一个步骤——DNS解析&#xff0c;本篇文章将跟着DNS解析过程来分析域名是如何解析的。 一、DNS域名解析步骤 下图是DNS域名解析的一个示例图&#xff0c;它涵盖了基本解析步骤和原理。 下…