基本增,删,改,查 调用存储过程笔记

基本增,删,改,查 调用存储过程笔记
目标:调用存储过程,实现基本的增删改查。
实现:1.首先,我们实现添加员工的功能。
                    1)我们先创建 一个添加员工的JSP 页面,在这个页面中,我们可以添加员工的姓名、年龄、部门、职位信息。(这里我们使用add.jsp)
                    2)通过JSP页面表单,我们可以提交信息,我们可以将信息提交到servlet(这里我们使用 AddEmployeeServlet.java)
                    3)在servlet中,我们可以将表单获取的信息提取出来,然后,在servlet中,我们可以调用EmployeeDAO中的addEmployee(Employee em)方法,将信息传递给Oracle
                    4)在EmployeeDAO中,我们在addEmployee(Employee em)方法中,采用存储过程 String sql =  "{call addEmployee(e_seq.nextval,?,?,?,?,?)}" ;将信息传递给数据库,并将员工信息添加到employee表中,最后我们返回一个结果rs,判断是否添加成功

          5)在servlet中,我们接受由addEmployee(Employee em)返回的结果,判断,若rs="插入成功",则返回ok.jsp页面,否则,返回fail.jsp页面。
          6)这样,我们便成功地实现了基本的添加功能。
          7)具体的实现代码如下:
<1>add.jsp页面

<%@ page language="java"contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%

    String path = request.getContextPath();

    String basePath = request.getScheme() + "://" + request.getServerName() + ":"

            + request.getServerPort() + path + "/";

%>

<!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>

<%

    //定义表单即将要提交的servlet的地址

    String p = basePath + "AddEmployeeServlet";

%>

<!-- 定义要输入的员工信息 -->

<form action = "<%=p%>"method = "post" name"form3">

    员工姓名:<input type = "text"name = "name" value""/>

    员工年龄:<input type = "text"name = "age" value""/>

    员工职位:<input type = "text"name = "position" value""/>

    员工部门: <input type = "text"name = "dept" value""/>

    <input type = "submit"name = "submit" value"提交"/>

</form>

 

</body>

</html>

<2>AddEmployeeServlet.java

package servlet;

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.ServletConfig;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import dao.EmployeeDAO;

import entity.Employee;

 

/**

 * Servlet implementation class AddEmployeeServlet

 * 目标:实现员工信息的值的获取,并将值传递至EmployeeDAO中的addEmployee()方法中,以便能够将数据插入到数据库。

 * 实现:我们通过request.getParameter()获取员工信息的值,并将之封装在一个Employee对象中,

 *     然后通过EmployeeDAO中的addEmployee()方法将这些值传递给Oracle数据库。

 */

public class AddEmployeeServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

      

    /**

     * @see HttpServlet#HttpServlet()

     */

    public AddEmployeeServlet() {

        super();

    } 

    /**

     * @see Servlet#init(ServletConfig)

     */

    public void init(ServletConfig config) throws ServletException {

       // TODO Auto-generated method stub

    }

 

    /**

     * @see Servlet#destroy()

     */

    public void destroy() {

       // TODO Auto-generated method stub

    }

 

    /**

     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)

     */

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

       // TODO Auto-generated method stub

       doPost(request,response);

    }

 

    /**

     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)

     */

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

       // TODO Auto-generated method stub

       //设置编码方式

       request.setCharacterEncoding("UTF-8");

       response.setCharacterEncoding("gb2312");

      

       //获取Employee的信息值

       String name = request.getParameter("name");

      

       String age = request.getParameter("age");

      

       String position = request.getParameter("position");

      

       String dept = request.getParameter("dept");

      

       //创建Employee对象,并将值传递给该对象。

       Employee em = new Employee();

      

       em.setName(name);

      

       em.setAge(Integer.parseInt(age));

      

       em.setDept(dept);

      

       em.setPosition(position);

      

       //将封装出来的employee对象传递给EmployeeDAO中的addEmployee()方法

       EmployeeDAO e = new EmployeeDAO();

       //获取rs的值

       String rs = e.addEmployee(em);

       System.out.println(rs);

       //创建out对象

       PrintWriter out = response.getWriter();

       //判断是否添加成功并作出反应。

       if(rs.equals("插入成功")){

           out.println("<script>alert('插入成功!')</script>");

           request.getRequestDispatcher("ok.jsp").forward(request, response);

      

       }else{

           out.println("<script>alert('插入失败!')</script>");

           request.getRequestDispatcher("fail.jsp").forward(request, response);

          

       }

    }

 

}

<3>EmployeeDAO的addEmployee(Employee em)方法

/*

     * addEmployee(Employee em)方法中,我们可以将员工的信息插入到Oracleemployee表中。

     */

    public String addEmployee(Employee em){

      

       //创建Connection

       Connection con = null;

       //创建CallableStatement

       CallableStatement call = null;

       //创建rs

       String rs = null;

      

       //获取输入值(即获取新增员工信息)

       String name = em.getName();

      

       int age = em.getAge();

      

       String position = em.getPosition();

      

       String dept = em.getDept();

      

       //定义sql语句

       String sql = "{call addEmployee(e_seq.nextval,?,?,?,?,?)}";

      

       //建立连接

       con = DBConnection.getConnection();

      

      

       try {

           //发送sql语句

           call = con.prepareCall(sql);

           //为占位符设置值

           call.setString(1, name);

           call.setInt(2,age);

           call.setString(3, position);

           call.setString(4,dept);

           call.registerOutParameter(5, OracleTypes.VARCHAR);

          

           //执行sql语句

           call.execute();

          

           //获取rs

           rs = call.getString(5);

          

       } catch (SQLException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }

       return rs;

   

    }

<4>ok.jsp

<%@ page language="java"contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%

    String path = request.getContextPath();

 

    String basePath = request.getScheme() + "://" + request.getServerName() + ":"

            + request.getServerPort() + path + "/";

%>

<!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>

<%

    //定义表单即将要提交的servlet的地址

    String p = basePath + "SelectServlet?page=";

%>

 

<form action = "<%=p%>"method = "post" name"form4">

    <input type = "submit"name = "submit" value"查询所有员工信息"/>

</form>

</body>

</html>

<5>fail.jsp

<%@ page language="java"contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%

    String path = request.getContextPath();

 

    String basePath = request.getScheme() + "://" + request.getServerName() + ":"

            + request.getServerPort() + path + "/";

%>

<!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>

<%

    //定义表单即将要提交的servlet的地址

    String p = basePath + "AddEmployeeServlet";

%>

<form action = "add.jsp"method = "post" name"form4">

    <input type = "submit"name = "submit" value"返回添加页面"/>

</form>

</body>

</html>

        2.我们实现数据的查询功能

            1)当我们添加数据成功后,我们会跳转到ok.jsp页面,在这个页面中,有一个查询所有员工信息的按钮

            2)点击这个按钮,我们开始查询功能

            3)首先,表单会将我们的页面跳转到SelectServlet?page= 页面,这样我们就会转到SelectServlet.java的类中。

            4)在这个类中,我们将会获取到目前要查询的当前页面的值,另外,我们还会定义每页即将显示的记录条数,

然后,我们将这两个参数传到EmployeeDAO中的getAllEmployee(int currentPage,int page_num)中。

            5)在EmployeeDAO中的getAllEmployee(int currentPage,int page_num)中,我们可以获取到查询出来的某一页的列表。

            6)我们还可以通过EmployeeDAO中的getTotalRecords(int currentPage,int page_num)方法获取到总的记录条数。

            7)在servlet中,我们会将总的记录条数转换为总页数,然后,我们将员工信息列表及总页数转到select.jsp页面。

            8)在select.jsp页面中,我们可以循环输出我们查询到的员工信息,另外,我们还可以点击上一页、下一页、最后一页、第一页的链接进行数据的跳转。

            9)这样,我们便可以实现数据的分页查询功能了

            10)具体实现代码如下所示:

<1>SelectServelt.java

package servlet;

 

import java.io.IOException;

import java.util.List;

 

import javax.servlet.ServletConfig;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

 

import dao.EmployeeDAO;

import entity.Employee;

 

/**

 * Servlet implementation class SelectServlet

 */

public class SelectServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

      

    /**

     * @see HttpServlet#HttpServlet()

     */

    public SelectServlet() {

        super();

        // TODO Auto-generated constructor stub

    }

 

    /**

     * @see Servlet#init(ServletConfig)

     */

    public void init(ServletConfig config) throws ServletException {

       // TODO Auto-generated method stub

    }

 

    /**

     * @see Servlet#destroy()

     */

    public void destroy() {

       // TODO Auto-generated method stub

    }

 

    /**

     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)

     */

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

       // TODO Auto-generated method stub

       doPost(request,response);

    }

 

    /**

     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)

     */

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

       // TODO Auto-generated method stub

       //设置编码方式为UTF-8

       request.setCharacterEncoding("UTF-8");

       response.setCharacterEncoding("UTF-8");

      

       //当前页码的设置

       int currentPage = 0;

       //获取当前页码的值

       String page = request.getParameter("page");

      

       if(page == null){

          

           currentPage = 1;

       }else{

          

           try{

             

              currentPage = Integer.valueOf(page);

           }catch(NumberFormatException e){

             

              currentPage = 1;

           }

       }

      

       //设置每页的记录数为10

       int page_num = 5;

      

       //获取员工列表

       EmployeeDAO e = new EmployeeDAO();

      

       List<Employee> list = e.getAllEmployee(currentPage, page_num);

      

       //将该list对象添加到request,并指定key值为"list"

       request.setAttribute("list", list);

      

       //获取总的记录数

       int total = e.getTotalRecords(currentPage, page_num);

       int totalPage = 0;

      

       if(total%page_num != 0){

          

           totalPage = total/page_num+1;

       }else{

          

           totalPage = total/page_num;

       }

          

      

       System.out.println(totalPage);

       //将该total添加到session,并指定key值为total

       HttpSession session = request.getSession();

      

       session.setAttribute("total", totalPage);

      

       //将获取到的值转发至fenye.jsp页面,用来显示获取到的值

        request.getRequestDispatcher("select.jsp?page="+currentPage).forward(request,response);

          

    }

 

}

 

<2>EmployeeDAO中的getAllEmployee(int currentPage,int page_num)方法

/*

     * 通过getAllEmployee()方法获取Employee列表。

     * 参数为当前页数currentPage,每页记录数page_num

     *

     */

   

    public List<Employee> getAllEmployee(int currentPage,int page_num){

 

    //创建Connection对象

    Connection con = null;

    //创建CallableStatement对象

    CallableStatement call = null;

    //创建ResultSet对象

    ResultSet rs = null;

    //创建Employee列表

    List<Employee> list = new ArrayList<Employee>();

   

    //获取连接

    con = DBConnection.getConnection();

    //建立sql语句

    String sql = "{call mypage.getDataByPage(?,?,?,?,?,?,?,?)}";

    try {

       //获取call的值

       call = con.prepareCall(sql);

       //call为存储过程赋值

       //设置表名为employee

       call.setString(1, " employee ");

       //设置属性值为name,age,position

       call.setString(2," name,age,pro,dept,id ");

       //设置条件为1=1

       call.setString(3," 1=1 ");

       //设置排序方式为按id排序

       call.setString(4," id ");

       //设置当前页码为currentPage

       call.setInt(5,currentPage);

       //设置每页的记录数为page_num

       call.setInt(6,page_num);

       //设置游标输出

       call.registerOutParameter(7, OracleTypes.CURSOR);

       //设置输出总记录数

       call.registerOutParameter(8, OracleTypes.NUMBER);

      

       //执行存储过程查询数据

       call.execute();

       //获取表中数据,即Employee信息

       rs = (ResultSet)call.getObject(7);

       //循环获取每一行记录,并将每一行的记录放入Employee对象中。

       while(rs.next()){

           //创建Employee对象,并为该对象赋值。

           Employee e = new Employee();

          

           e.setId(rs.getInt("id"));

          

           e.setName(rs.getString("name"));

          

           e.setAge(rs.getInt("age"));

          

           e.setPosition(rs.getString("pro"));

          

           e.setDept(rs.getString("dept"));

           //将该对象添加到list列表中

           list.add(e);

       }

      

      

    } catch (SQLException e) {

       // TODO Auto-generated catch block

       e.printStackTrace();

    }finally{

       //最后不要忘记关闭连接

       DBConnection.close(rs, call, con);

    }

    //返回Employee列表

    return list;

    }

<3>EmployeeDAO的getTotalRecords(int currentPage,int page_num)方法

/*

     * 通过getTotalRecords()方法获取总的记录数。

     * 参数为当前页数currentPage,每页记录数page_num

     */

    public int getTotalRecords(int currentPage,int page_num){

       //定义总记录数

       int total = 0;

       //创建Connection对象

       Connection con = null;

       //创建CallableStatement对象

       CallableStatement call = null;

       //获取连接

       con = DBConnection.getConnection();

       //建立sql语句,存储过程的sql语句一定要写对,{call 包头名.包体名(参数占位符)}

       String sql = "{call mypage.getDataByPage(?,?,?,?,?,?,?,?)}";

       try {

           //获取call的值

           call = con.prepareCall(sql);

           //call为存储过程赋值

           //赋值时被忘了参数两端的空格,根据存储过程的不同,传参方式可能不同

           //设置表名为employee

           call.setString(1, " employee ");

           //设置属性值为name,age,position

           call.setString(2," name,id ");

           //设置条件为1=1

           call.setString(3," 1=1 ");

           //设置排序方式为按id排序

           call.setString(4," id ");

           //设置当前页码为currentPage

           call.setInt(5, currentPage);

           //设置每页的记录数为page_num

           call.setInt(6,page_num);

           //设置游标输出

           call.registerOutParameter(7, OracleTypes.CURSOR);

           //设置输出总记录数

           call.registerOutParameter(8, OracleTypes.NUMBER);

          

           //执行存储过程查询数据

           call.execute();

           //获取总记录数

           total = call.getInt(8);

       }catch (SQLException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }finally{

           //最后不要忘记关闭连接

           DBConnection.close(null, call, con);

       }

       return total;

    }

<4>select.jsp

<%@ page language="java"contentType="text/html; charset=UTF-8" import = "java.util.*,entity.*"

    pageEncoding="UTF-8"%>

    <%

        String path = request.getContextPath();

   

        String basePath = request.getScheme() + "://" + request.getServerName()

               + ":" + request.getServerPort() + path + "/";

    %>

<!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>

<%

    String p = basePath + "SelectServlet?page";

%>

<%--获取当前页面的页码 --%>

<%

    int currentPage = 0;

 

    String pages = request.getParameter("page");

   

    if(page == null){

      

       currentPage = 1;

    }else{

      

       try{

          

           currentPage = Integer.parseInt(pages);

       }catch(NumberFormatException e){

          

           currentPage = 1;

       }

    }

%>

 

<!-- 创建表格,显示数据 -->

<table border = "1"align = "center">

    <tr>

       <th>员工姓名</th>

       <th>员工年龄</th>

       <th>员工职位</th>

       <th>员工部门</th>

    </tr>

   

       <%

       //查询数据

       List<Employee> list = (List<Employee>)request.getAttribute("list");

      

       //循环输出数据

       for(int i = 0; i < list.size(); i++){

          

           Employee em = list.get(i);

          

           String name = em.getName();

          

           int age = em.getAge();

          

           String position = em.getPosition();

          

           String dept = em.getDept();

          

           int id = em.getId();

          

           System.out.print("************"+id);

 

       %>

       <tr>

       <td><%=name %></td>

       <td><%=age %></td>

       <td><%=position %></td>

       <td><%=dept %></td>

       </tr>

       <%%>

      

</table>

<br/>

<%

    //获取总页数

    Integer totalPage = (Integer)session.getAttribute("total");

 

%>

<%

    //判断当前页面的页数,显示链接

    if(currentPage < 1) {

      

       currentPage = 1;

    }

    if(currentPage != 1){

      

       out.println("<a href = 'SelectServlet?page="+(currentPage-1)+"'>上一页</a>");

      

       out.println("<a href = 'SelectServlet?page="+totalPage+"'>最后一页</a>");

    }

    if(currentPage != totalPage){

      

       out.println("<a href = 'SelectServlet?page="+(currentPage+1)+"'>下一页</a>");

      

       out.println("<a href = 'SelectServlet?page="+1+"'>第一页</a>");

    }

%>

 

 

</body>

</html>

        3.我们实现数据的删除功能

                1)要实现数据的删除功能,我们可以在select.jsp页面上添加一个删除链接,通过这个链接,我们可以获取到员工的id号

                2)点击删除链接,我们可以跳转到DeleteServlet

                3)在servlet中,我们可以通过传递过来的id,将该id传递到EmployeeDAO中的deleteEmployee(int id)方法

                 4)通过EmployeeDAO 中的deleteEmployee(int id) 方法,我们删除数据库中相应的数据,返回一个是否删除的信息

                5)在servlet中,我们获取到EmployeeDAO中传递过来的删除成功与否的信息,若删除成功,我们返回SelectServlet进行查询,若删除失败,我们返回select.jsp页面。

                6)这样,我们便实现了数据的删除

                7)具体实现代码如下所示:

<1>select.jsp页面中的删除链接

    <td><a href = "DeleteServlet?id=<%=id %>">删除</a></td> 

<2>DeleteServlet.java

package servlet;

 

import java.io.IOException;

import java.io.PrintWriter;

 

import javax.servlet.ServletConfig;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

import dao.EmployeeDAO;

 

/**

 * Servlet implementation class DeleteServlet

 */

public class DeleteServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

      

    /**

     * @see HttpServlet#HttpServlet()

     */

    public DeleteServlet() {

        super();

        // TODO Auto-generated constructor stub

    }

 

    /**

     * @see Servlet#init(ServletConfig)

     */

    public void init(ServletConfig config) throws ServletException {

       // TODO Auto-generated method stub

    }

 

    /**

     * @see Servlet#destroy()

     */

    public void destroy() {

       // TODO Auto-generated method stub

    }

 

    /**

     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)

     */

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

       // TODO Auto-generated method stub

       doPost(request,response);

    }

 

    /**

     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)

     */

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

       // TODO Auto-generated method stub

       request.setCharacterEncoding("UTF-8");

      

       int id = Integer.parseInt(request.getParameter("id"));

      

       System.out.println(id);

      

       int page = 0;

      

       if(request.getParameter("pages") == null){

          

           page = 1;

       }else{

          

           try{

             

              page = Integer.parseInt(request.getParameter("pages"));

           }catch(NumberFormatException e){

             

              page = 1;

           }

       }

      

       EmployeeDAO e = new EmployeeDAO();

      

       if(e.deleteEmployee(id).equals("删除成功!")){

          

           request.getRequestDispatcher("SelectServlet?pages="+page).forward(request, response);

          

       }else{

          

           PrintWriter out = response.getWriter();

           out.println("<script>alert('删除失败!');location.href='select.jsp?page="+page+"';</script>");

       }

    }

 

}

 

<3>EmployeeDAO 中的deleteEmployee(int id) 方法

public String deleteEmployee(int id){

       //创建Connection

       Connection con = null;

       //创建CallableStatement

       CallableStatement call = null;

       //创建rs

       String rs = null;

       //构建sql语句

       String sql = "{call deleteEmployee(?,?)}";

       //创建连接

       con = DBConnection.getConnection();

      

       try {

           //发送SQL语句

           call = con.prepareCall(sql);

           //为占位符设置值

           call.setInt(1, id);

           call.registerOutParameter(2, OracleTypes.VARCHAR);

           //执行sql语句

           call.execute();

           //获取rs的值

           rs = call.getString(2);

          

       } catch (SQLException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }finally{

           //关闭连接

           DBConnection.close(null, call, con);

       }

      

       return rs;

    }

   4.我们实现数据的修改功能

        1)同样的,我们在select.jsp页面上添加一个修改的链接

        2)点击修改链接,我们可以跳转到UpdateEmployeeServlet,在这个servlet中,我们可以通过对参数para进行匹配,然后进行相应的操作。 

                 3)如果参数为getemployee,我们会跳转到getEmployee()方法中,在这个方法中,我们会通过EmployeeDAO中的getEmployee(int id)方法来查询出该id所属的员工信息,并将该员工的信心显示到update.jsp页面

                  4)在update.jsp页面,我们可以对该员工的信息进行修改,并将修改后的信息通过提交按钮提交给UpdateEmployeeServlet。

                5)在UpdateEmployeeServlet中,我们通过参数update匹配,跳转到updateEmployee()方法

                6)在 UpdateEmployee()方法中,我们可以获取到表单提交的信息(即修改后的员工信息),然后,我们通过EmployeeDAO中的updateEmployee(Employee em)方法对员工的信息进行修改,然后返回一个 是否修改成功的rs

                7)通过对rs进行判断,若更新成功,则返回SelectServlet,若更新失败,还是返回SelectServlet。

                8)这样,我们便实现了数据的修改功能

                9) 具体实现代码如下所示:

<1>修改链接

<td><a href = "UpdateEmployeeServlet?para=getemployee&id=<%=id%>">修改</a></td>

<2>UpdateEmployeeServlet

package servlet;

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.ServletConfig;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import dao.EmployeeDAO;

import entity.Employee;

/**

 * Servlet implementation class UpdateServlet

 */

public class UpdateEmployeeServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    private int currentPage  ;

    private int id;

    /**

     * @see HttpServlet#HttpServlet()

     */

    public UpdateEmployeeServlet() {

        super();

        // TODO Auto-generated constructor stub

    }

    /**

     * @see Servlet#init(ServletConfig)

     */

    public void init(ServletConfig config) throws ServletException {

        // TODO Auto-generated method stub

    }

    /**

     * @see Servlet#destroy()

     */

    public void destroy() {

        // TODO Auto-generated method stub

    }

    /**

     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)

     */

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // TODO Auto-generated method stub

        doPost(request,response);

    }

    /**

     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)

     */

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // TODO Auto-generated method stub

        //设置编码方式

        request.setCharacterEncoding("UTF-8");

        response.setCharacterEncoding("gb2312");

        

        String para = request.getParameter("para");

        

        if(para.equals("getemployee")){

            

            getEmployee(request,response);

        }    

        if(para.equals("update")){

            

            updateEmployee(request,response);

        }

    }

    

    public void getEmployee(HttpServletRequest request,HttpServletResponse response){

        //设置当前页数

        currentPage = 0;

        

        String page = request.getParameter("pages");

        

        if(page == null){

            

            currentPage = 1;

        }else{

            

            try{

                

                currentPage = Integer.parseInt(page);

            }catch(NumberFormatException e){

                

                currentPage = 1;

            }

        }

        

        id = Integer.parseInt(request.getParameter("id"));

        

        EmployeeDAO e = new EmployeeDAO();

        

        Employee em = e.getEmployee(id);

        

        request.setAttribute("em",em);

        

        try {

            request.getRequestDispatcher("update.jsp").forward(request, response);

        } catch (ServletException e1) {

            // TODO Auto-generated catch block

            e1.printStackTrace();

        } catch (IOException e1) {

            // TODO Auto-generated catch block

            e1.printStackTrace();

        }

        

    }

    public void updateEmployee(HttpServletRequest request,HttpServletResponse response){

    

        //获取文本框修改后的员工信息

        Employee em = new Employee();

        

        em.setId(id);

        

        System.out.println(id);

        

        em.setName(request.getParameter("name"));

        

        System.out.println(request.getParameter("name"));

        

        em.setAge(Integer.parseInt(request.getParameter("age")));

        

        em.setDept(request.getParameter("dept"));

        

        em.setPosition(request.getParameter("position"));

        

        //获取结果,看修改是否成功

        EmployeeDAO e = new EmployeeDAO();

        

        String rs = e.updateEmployee(em);

        

        System.out.println("------------"+rs);

        

        PrintWriter out = null;

        

        try {

            out = response.getWriter();

        } catch (IOException e1) {

            // TODO Auto-generated catch block

            e1.printStackTrace();

        }

        

        if(rs.equals("更新成功")){

            

            try {

                request.getRequestDispatcher("SelectServlet?page="+currentPage).forward(request, response);

            } catch (ServletException e1) {

                // TODO Auto-generated catch block

                e1.printStackTrace();

            } catch (IOException e1) {

                // TODO Auto-generated catch block

                e1.printStackTrace();

            }

        }else{

            out.print("<script>alert('更新失败!')</script>");

        }

    }

}

<3>EmployeeDAO中的getEmployee(int id)方法

/*

     * 通过getEmployeeint id)我们可以获取到id所属的员工信息

     */

   

    public Employee getEmployee(int id){

      

       Employee em = new Employee();

      

       //创建Connection

       Connection con = null;

       //创建CallableStatement

       CallableStatement call = null;

       //构建sql语句

       String sql = "{call selectEmployee(?,?,?,?,?)}";

       //创建连接

       con = DBConnection.getConnection();

      

       try {

           //发送sql语句

           call = con.prepareCall(sql);

           //为占位符设置值

           call.setInt(1, id);

           call.registerOutParameter(2, OracleTypes.VARCHAR);

           call.registerOutParameter(3, OracleTypes.NUMBER);

           call.registerOutParameter(4, OracleTypes.VARCHAR);

           call.registerOutParameter(5, OracleTypes.VARCHAR);

           //执行sql语句

           call.execute();

           //Employee对象赋值

           em.setName(call.getString(2));

           em.setAge(call.getInt(3));

           em.setDept(call.getString(4));

           em.setPosition(call.getString(5));

       } catch (SQLException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }finally{

          

           DBConnection.close(null, call, con);

       }

      

      

       return em;

    }

<4>update.jsp

<%@ page language="java"contentType="text/html; charset=UTF-8" import = "java.util.*,entity.*"

    pageEncoding="UTF-8"%>

    <%

        String path = request.getContextPath();

   

        String basePath = request.getScheme() + "://" + request.getServerName() +

                  ":" + request.getServerPort() + path + "/";

    %>

<!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>

<%

    //获取要修改的记录的id

    int id = Integer.parseInt(request.getParameter("id"));

    //获取form即将要提交的路径

    String p = basePath + "UpdateEmployeeServlet?para=update";

%>

<%

    Employee em = (Employee)request.getAttribute("em");

 

    String name = em.getName();

   

    int age = em.getAge();

   

    String dept = em.getDept();

   

    String position = em.getPosition();

%>

<form action = "<%=%>"method = "post" name="form5">

    员工姓名:<input type = "text"name = "name" value"<%=name %>"/>

    员工年龄:<input type = "text"name = "age" value"<%=age %>"/>

    员工部门:<input type = "text"name = "dept" value="<%=dept %>"/>

    员工职位:<input type = "text"name = "position" value"<%=position %>"/>

    <input type = "submit"name = "submit" value"提交"/>

</form>

 

</body>

</html>

<5>EmployeeDAO中的updateEmployee(Employee em)方法

/*

     * 通过updateEmployee(Employee em)方法,我们可以修改员工信息

     */

    public String updateEmployee(Employee em){

       //定义返回结果

       String rs = null;

       //创建Connection

       Connection con = null;

       //创建CallableStatement

       CallableStatement call = null;

       //构建sql语句

       String sql = "{call updateEmployee(?,?,?,?,?,?)}";

       //建立连接

       con = DBConnection.getConnection();

      

       //获取Employee的信息

       int id = em.getId();

      

       String name = em.getName();

      

       int age = em.getAge();

      

       String dept = em.getDept();

      

       String position = em.getPosition();

      

       try {

           //发送sql语句

           call = con.prepareCall(sql);

           //为占位符设置值

           call.setInt(1, id);

           call.setString(2, name);

           call.setInt(4, age);

           call.setString(3, dept);

           call.setString(5, position);

           call.registerOutParameter(6, OracleTypes.VARCHAR);

           //执行sql语句

           call.execute();

           //获取结果

           rs = call.getString(6);

       } catch (SQLException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }

       //返回结果

       return rs;

    }


    5.在本次编程中,我们需要用到的存储过程的sql语句如下:

        <1>{call addEmployee(e_seq.nextval,?,?,?,?,?)}


        <2>{call deleteEmployee(?,?)}


        <3>{call selectEmployee(?,?,?,?,?)}


            <4>{call updateEmployee(?,?,?,?,?,?)}


        <5>{call mypage.getDataByPage(?,?,?,?,?,?,?,?)}

create or replace package mypage

as

type page_cur is ref cursor;

procedure getDataByPage(

  p_tableName varchar2,--表名

  p_fields varchar2,--字段

  p_filter varchar2,--条件

  p_sort varchar2,--排序

  p_curpage number,--当前页码

  p_pageSize number,--记录数

  p_cursor out page_cur,--游标

  p_totalRecords out number--总记录数

  );

  end mypage;

  

  

create or replace package body mypage as

procedure getDataByPage(

  p_tableName varchar2,

  p_fields varchar2,

  p_filter varchar2,

  p_sort varchar2,

  p_curpage number,

  p_pageSize number,

  p_cursor out page_cur,

  p_totalRecords out number

  ) as

  v_sql varchar2(1000) := '';

  w_Text varchar2(100);

  o_Text varchar2(100);

begin 

  if p_filter is not null then 

    w_Text := 'where' || p_filter;

    end if;

    if p_sort is not null then

      o_Text := 'order by' || p_sort;

      end if;

      v_sql := 'select * from 

      (

      select rownum rm,'||p_fields||' from

      (select * from '||p_tableName||w_Text||o_Text ||') T 

      where rownum <=:1

      ) 

      where rm >:2';

      dbms_output.put_line(v_sql);

      open p_cursor for v_sql using p_curpage*p_pageSize,p_pageSize*(p_curpage-1);

      

      v_sql := 'select count(*) from '||p_tableName||w_Text||o_Text;

      dbms_output.put_line(v_sql);

      execute immediate v_sql into p_totalRecords;

      end getDataByPage;

      end;


这样,我们便实现了数据最基本的增删改查功能。

                 


 

            
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值