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>