Oracle+jsp+Servlet的员工表的简单增删改查

本文介绍了一个基于Java的员工管理系统,包括数据库连接、实体类定义、DAO层接口及其实现类、Servlet处理逻辑及前后台交互流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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>

 

 

转载于:https://www.cnblogs.com/cxqbk/p/11207755.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值