1.引入jar包

2.连接数据库(编写连接数据库工具类)
JDBCUtils.java
package com.demo.utils; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class JDBCUtils { private static String jar="oracle.jdbc.OracleDriver"; private static String url="jdbc:oracl:thin:@localhost:1521:orcl"; private static String user="scott"; private static String pwd="tiger"; private static Connection conn=null;; public static Connection getConnection(){ try { Class.forName("oracle.jdbc.OracleDriver"); conn = DriverManager.getConnection(url, user, pwd); } catch (ClassNotFoundException e) { e.printStackTrace(); }catch (SQLException e) { e.printStackTrace(); } return conn; } public static void closeConnection(Connection conn){ if(conn!=null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
3.编写员工的实体类 Emp.java
package com.demo.pojo; public class Emp { private int empno; private String ename; private String job; private int sal; private int comm; private int mgr; private int deptno; public String getEname() { return ename; } public void setEname(String ename) { this.ename = ename; } public int getEmpno() { return empno; } public void setEmpno(int empno) { this.empno = empno; } public String getJob() { return job; } public void setJob(String job) { this.job = job; } public int getSal() { return sal; } public void setSal(int sal) { this.sal = sal; } public int getComm() { return comm; } public void setComm(int comm) { this.comm = comm; } public int getMgr() { return mgr; } public void setMgr(int mgr) { this.mgr = mgr; } public int getDeptno() { return deptno; } public void setDeptno(int deptno) { this.deptno = deptno; } }
4.编写一个接口
package com.demo.dao; import java.util.List; import java.util.Map; import com.demo.pojo.Emp; public interface EmpDAO { //显示数据列表 public List<Map<String,Object>> getAll(); //删除 public boolean delEmpByEno(int empno); //新增 public boolean addEmpByEno(Emp e); //根据编号查询信息 public Map<String, Object> findEmpByEno(int eno); //修改 public boolean updateEmp(Emp e); }
5.写接口实现类
package com.demo.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.demo.pojo.Emp; import com.demo.utils.JDBCUtils; public class EmpDAOImpl implements EmpDAO { /** * 加载员工表中的所有信息 */ @Override public List<Map<String, Object>> getAll() { List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); String sql = "select empno,ename,sal,job, nvl(comm,0) from emp"; try { Connection conn = JDBCUtils.getConnection(); Statement st = conn.createStatement(); ResultSet rs = st.executeQuery(sql); while (rs.next()) { Map<String, Object> m = new HashMap<String, Object>(); m.put("eno", rs.getInt(1)); m.put("ename", rs.getString(2)); m.put("sal", rs.getInt(3)); m.put("job", rs.getString(4)); m.put("comm", rs.getInt(5)); list.add(m); } } catch (SQLException e) { e.printStackTrace(); } return list; } /** * 根据员工编号,删除员工信息 */ @Override public boolean delEmpByEno(int empno) { boolean b = false;// 默认对数据库操作失败 String sql = "delete from emp where empno=" + empno; try { Connection conn = JDBCUtils.getConnection(); Statement st = conn.createStatement(); int i = st.executeUpdate(sql); if (i > 0) { b = true; } } catch (SQLException e) { e.printStackTrace(); } return b; } /** * 新增员工操作 */ @Override public boolean addEmp(Emp e) { boolean b = false;// 对数据库的操作失败的 String sql = "insert into emp(empno,ename,job,sal,comm,mgr,deptno,hiredate) " + " values(?,?,?,?,?,?,?,sysdate) "; // 获取数据库连接 Connection conn = JDBCUtils.getConnection(); try { // 创建对数据库操作的预编译对象,目的:看看sql中有多少个?,然后用实际数据替换? PreparedStatement ps = conn.prepareStatement(sql); ps.setInt(1, e.getEmpno()); ps.setString(2, e.getEname()); ps.setString(3, e.getJob()); ps.setInt(4, e.getSal()); ps.setInt(5, e.getComm()); ps.setInt(6, e.getMgr()); ps.setInt(7, e.getDeptno()); int i = ps.executeUpdate(); if (i > 0) { b = true; } } catch (SQLException e1) { e1.printStackTrace(); } JDBCUtils.closeConnection(conn); return b; } /** * 根据员工编号加载员工信息 */ @Override public Map<String, Object> findEmpByEno(int eno) { Map<String, Object> m = new HashMap<String,Object>(); String sql = "select empno,ename,job,sal,comm,mgr,deptno from emp where empno=" + eno; try { Connection conn = JDBCUtils.getConnection(); Statement st = conn.createStatement(); ResultSet rs = st.executeQuery(sql); //在获取查询结果的时候,因为明确的知道了,查询的结果,最多只有1行,所以才使用了if操作 if(rs.next()){ m.put("eno", rs.getInt(1)); m.put("ename", rs.getString(2)); m.put("job", rs.getString(3)); m.put("sal", rs.getInt(4)); m.put("comm", rs.getInt(5)); m.put("mgr", rs.getInt(6)); m.put("dno", rs.getInt(7)); } } catch (SQLException e) { e.printStackTrace(); } return m; } /** * 修改员工信息 */ @Override public boolean updateEmp(Emp e) { boolean b = false; String sql="update emp set ename=?,sal=?,job=?,comm=?,mgr=?,deptno=? where empno=?"; try { Connection conn = JDBCUtils.getConnection(); PreparedStatement ps= conn.prepareStatement(sql); ps.setString(1, e.getEname()); ps.setInt(2, e.getSal()); ps.setString(3, e.getJob()); ps.setInt(4, e.getComm()); ps.setInt(5, e.getMgr()); ps.setInt(6, e.getDeptno()); ps.setInt(7, e.getEmpno()); int i = ps.executeUpdate(); if(i > 0){ b = true; } } catch (SQLException e1) { e1.printStackTrace(); } return b; } }
6.增删改查的servlet
ListEmpServlet
package com.demo.servlet; import java.io.IOException; import java.util.List; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.demo.dao.EmpDAO; import com.demo.dao.EmpDAOImpl; public class ListEmpServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取数据库表中的所有数据 EmpDAO dao = new EmpDAOImpl(); List<Map<String,Object>> list = dao.getAll(); //创建输出流对象,将数据通过输出流对象,然后使用for 进行操作显示 //将list 传递到java server page 简称jsp 的页面上 //将数据添加到request 对象中 request.setAttribute("list", list); //跳转你想去的页面,服务器端跳转 request.getRequestDispatcher("list.jsp").forward(request, response); } }
DelEmpServlet
package com.demo.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.demo.dao.EmpDAO; import com.demo.dao.EmpDAOImpl; /** * Servlet implementation class DelEmpServlet */ @WebServlet("/DelEmpServlet") public class DelEmpServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取页面传递的eno参数信息 String eno = request.getParameter("eno"); //将数据转换为你需要的int 类型 int empno = Integer.parseInt(eno); //将empno 传递到DAO层,对象数据库进程操作 EmpDAO dao = new EmpDAOImpl(); //接收对数据库操作的返回值信息 boolean b = dao.delEmpByEno(empno); //根据返回值信息,跳转不同的页面 if(b){ /* * 删除成功了,则回显到数据列表 * 此时,为什么必须带着forward? * 因为当前处理用户问题的操作(请求),还是在服务器上呢,并给没有给用户一个结果呢, * 切在下一个操作步骤中,不世道是不是需要继续处理用户的问题(请求), * 因此,就继续向下一个操作步骤,传递request,response 了 */ request.getRequestDispatcher("ListEmpServlet").forward(request, response); }else{ //删除失败了,则显示首页信息 request.getRequestDispatcher("index.html").forward(request, response); } } }
AddEmpServlet
package com.demo.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.demo.dao.EmpDAO; import com.demo.dao.EmpDAOImpl; import com.demo.pojo.Emp; @WebServlet("/AddEmpServlet") public class AddEmpServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取表单数据 int empno = Integer.valueOf(request.getParameter("empno")); String ename = request.getParameter("ename").trim(); String job = request.getParameter("job").trim(); /* * String age = request.getParameter("age"); int a = new Integer(age); */ int sal = Integer.valueOf(request.getParameter("sal")); int comm = new Integer(request.getParameter("comm")); int mgr = new Integer(request.getParameter("mgr")); int deptno = new Integer(request.getParameter("deptno")); // 将数据进行封装,存入到数据库中去 Emp e = new Emp(); e.setComm(comm); e.setDeptno(deptno); e.setEmpno(empno); e.setJob(job); e.setMgr(mgr); e.setSal(sal); e.setEname(ename); //创建dao层操作对象 EmpDAO dao = new EmpDAOImpl(); boolean b = dao.addEmp(e); //根据返回值信息,跳转不同的页面 if(b){ request.getRequestDispatcher("ListEmpServlet").forward(request, response); }else{ //删除失败了,则显示首页信息 request.getRequestDispatcher("index.html").forward(request, response); } } }
FindEmpByEnoServlet
package com.demo.servlet; import java.io.IOException; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.demo.dao.EmpDAO; import com.demo.dao.EmpDAOImpl; @WebServlet("/FindEmpByEnoServlet") public class FindEmpByEnoServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取员工的编号信息 int eno = Integer.parseInt(request.getParameter("eno")); //将员工编号传递到dao层,然后加载当前eno的员工信息 EmpDAO dao = new EmpDAOImpl(); //接收对数据库操作的返回值信息 Map<String, Object> b = dao.findEmpByEno(eno); //使用一个临时存储的空间,放置页面要获取的信息 request.setAttribute("info", b); //跳转到update.jsp页面上,然后显示出当前,员工的信息 request.getRequestDispatcher("update.jsp").forward(request, response); } }
UpdateEmpServlet
package com.demo.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.demo.dao.EmpDAO; import com.demo.dao.EmpDAOImpl; import com.demo.pojo.Emp; @WebServlet("/UpdateEmpServlet") public class UpdateEmpServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //接收表单数据 int empno = Integer.valueOf(request.getParameter("empno")); //下面处理中文乱码的方式,只能是单行,也就是只能对一个文本框的信息进行操作,不能全局操作。 String ename = new String(request.getParameter("ename").getBytes("iso-8859-1"),"UTF-8"); String job = request.getParameter("job").trim(); int sal = Integer.valueOf(request.getParameter("sal")); int comm = new Integer(request.getParameter("comm")); int mgr = new Integer(request.getParameter("mgr")); int deptno = new Integer(request.getParameter("deptno")); //封装表单数据 Emp e = new Emp(); e.setComm(comm); e.setDeptno(deptno); e.setEmpno(empno); e.setJob(job); e.setMgr(mgr); e.setSal(sal); e.setEname(ename); //将表单数据向下传递到DAO层,并获取返回结果 EmpDAO dao = new EmpDAOImpl(); boolean b =dao.updateEmp(e); //根据返回结果跳转页面 if(b){ request.getRequestDispatcher("ListEmpServlet").forward(request, response); }else{ //删除失败了,则显示首页信息 request.getRequestDispatcher("index.html").forward(request, response); } } }
前台jsp页面
1.首页 index.jsp
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>首页</title> </head> <body> <a href="ListEmpServlet">数据列表</a> <a href="addEmp.jsp">新增</a> </body> </html>
2.头文件 head.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> welcome: <font size="20" color="blue">aaa</font> logout repassword </body> </html>
3.数据列表页面 list.jsp
<%@page import="java.util.Map"%> <%@page import="java.util.List"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!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=UTF-8"> <title>数据列表</title> </head> <body> <%@ include file="head.html" %> <!-- 就目前,学习到的知识点来说,只有jsp 能够帮助我们获取动态数据 --> <center> <h1>数据列表页面</h1> <h6>数据列表页面</h6> </center> <!-- 获取servlet 传递过来的信息内容 --> <table align="center" width="900" border="1" cellpadding="0" cellspacing="0"> <!--一行标签 tr --> <tr align="center" height="30"> <!--一列叫td --> <td width="90">eno</td> <td>ename</td> <td>sal</td> <td>job</td> <td>comm</td> <td>操作</td> </tr> <% List<Map<String,Object>> list = (List<Map<String,Object>>)request.getAttribute("list"); for(Map<String,Object> m : list) { %> <tr align="center" height="30"> <td width="90"><%=m.get("eno")%></td> <td><%=m.get("ename")%></td> <td><%=m.get("sal")%></td> <td><%=m.get("job")%></td> <td><%=m.get("comm")%></td> <td><a href="DelEmpServlet?eno=<%=m.get("eno")%>">删除</a>|| <a href="FindEmpByEnoServlet?eno=<%=m.get("eno")%>">修改</a> </td> </tr> <% } %> <%-- 修改操作: 1、在数据列表的基础上做信息的修改 需要将数据列表中的修改这个文字,加上可以点击的操作 <a href="">修改</a> 2、点击修改文字,然后将需要修改的信息显示到update.jsp 页面上。 给后台java代码一个信息,告诉java代码,你要修改的信息是哪一行 <a href="findEmpByEno?eno=<%=m.get("eno")%>">修改</a> 如此,去数据库层,查询eno 加载eno当前的一行信息 说的直白一些:根据员工编号,去数据库加载当前员工的信息,显示在update.jsp 页面上 3、添加需要修改的信息,然后点击保存按钮 4、如果操作成功则显示数据列表 --%> </table> </body> </html>
4.增加页面 add.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>servlet处理表单信息</title> </head> <body> <form action="AddEmpServlet" method="post"> 员工编号:<input type="text" name="empno"/><br/> 员工姓名:<input type="text" name="ename"/><br/> 工资:<input type="text" name="sal"/><br/> 职位:<input type="text" name="job"/><br/> 领导编号:<input type="text" name="mgr"/><br/> 提成:<input type="text" name="comm"/><br/> 部门编号:<input type="text" name="deptno"/><br/> <input type="submit" value="提交"/> </form> </body> </html>
5.修改页面 update.jsp
<%@page import="java.util.Map"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <!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=UTF-8"> <title>Insert title here</title> </head> <body> <!-- html的注释 --> <%-- jsp 的注释写法 --%> <%@ include file="head.html" %> <br/><br/><br/><br/> <% Map<String,Object> m =(Map<String,Object>)request.getAttribute("info"); %> <!-- input 标签中的属性:(页面上的显示效果看似相同,实则操作结果不一样) 只读 : readonly="readonly" 能看不能改,提交表单数据后,当前所在的文本框信息,随表单提交到url指定位置 禁用: disabled="disabled" 能看不能改,提交表单数据后,当前所在的文本框信息,"不能"随表单提交到url指定位置 --> <form action="UpdateEmpServlet" method="post"> 员工编号:<input type="text" readonly="readonly" name="empno" value="<%=m.get("eno") %>"/><br/> 员工姓名:<input type="text" name="ename" value="<%=m.get("ename") %>"/><br/> 工资:<input type="text" name="sal" value="<%=m.get("sal") %>"/><br/> 职位:<input type="text" name="job" value="<%=m.get("job") %>"/><br/> 领导编号:<input type="text" name="mgr" value="<%=m.get("mgr") %>"/><br/> 提成:<input type="text" name="comm" value="<%=m.get("comm") %>"/><br/> 部门编号:<input type="text" name="deptno" value="<%=m.get("dno") %>"/><br/> <input type="submit" value="提交"/> <input type="reset" value="清空"> </form> </body> </html>