JavaWeb Demo:增、删、改、查

本文提供一个完整的示例程序,实现由页面对数据库数据进行增、删、改、查。

开发环境是jdk-14.0.2、mysql-8.0.22、tomcat-9.0.37、IntelliJ IDEA 2018。

项目文件、数据库文件打包下载:

JavaWebDemo_增删改查.rar_webdemocsdn下载-互联网文档类资源-CSDN下载

一、运行演示

1.页面

页面划分为四个独立的部分:头部、左部、中部、右部。各部分的功能是:

头部——展示标题;

左部——添加信息;

中部——查询、删除、修改;

右部——查看全部信息。

JavaWeb Demo:增、删、改、查_第1张图片

2.功能演示

A.增加

在左部页面,完成添加信息功能。

输入编号、姓名,选择性别,点击提交(当该编号的记录已存在时,无法加入)。

  • 成功加入:

JavaWeb Demo:增、删、改、查_第2张图片

JavaWeb Demo:增、删、改、查_第3张图片

  • 记录已存在,无法加入:

JavaWeb Demo:增、删、改、查_第4张图片

JavaWeb Demo:增、删、改、查_第5张图片

B.删除

在中部页面,先查询、再删除。

查询出编号为A008的记录

JavaWeb Demo:增、删、改、查_第6张图片

点击“删除”,删除成功。

JavaWeb Demo:增、删、改、查_第7张图片

JavaWeb Demo:增、删、改、查_第8张图片

C.修改

在中部页面,先查询、再修改。

查询出编号为A007的记录

JavaWeb Demo:增、删、改、查_第9张图片

点击“修改”,进入修改页面,原信息自动导入

JavaWeb Demo:增、删、改、查_第10张图片

将“萧峰”修改为“乔峰”

JavaWeb Demo:增、删、改、查_第11张图片

点击“提交”,修改成功。

JavaWeb Demo:增、删、改、查_第12张图片

D.查询

在删除和修改操作中,已经查询过单条记录。这里,在右部页面,查询出全部信息。

点击“点击查看全部信息”

JavaWeb Demo:增、删、改、查_第13张图片

整体视角

JavaWeb Demo:增、删、改、查_第14张图片

二、实现方法和步骤

1.数据库的建立

创建数据库,命名为“javawebdemo1”

   -> 建立一张数据表,命名为“person”

   -> 创建三个字段,分别为:

        number(主键)—— 编号;

        name —— 姓名;

        gender —— 性别。

表结构:

JavaWeb Demo:增、删、改、查_第15张图片

2.项目的结构

(1)整体结构

JavaWeb Demo:增、删、改、查_第16张图片

src,即后台部分:先创建cn.sigma包,再在下面创建entity、 database、 dao、 service、 servlet等子包。各包的功能含义为:

entity —— 实体类;

database —— 数据库连接类;

dao —— 数据访问;

service —— 业务逻辑;

servlet —— 用户功能和响应。

web,即前端部分:创建pageHeader、pageLeft、 pageMid、 pageRight等目录。各目录的含义为:

pageHeader —— 页面头部目录;

pageLef —— 页面左部目录;

pageMid —— 页面中部目录;

pageRight —— 页面右部目录。

(2)web部分的结构

JavaWeb Demo:增、删、改、查_第17张图片

前端使用标签将页面分为头、左、中、右四个独立的部分。

建立的jsp文件的功能含义为:

1)index.jsp —— 总页面;

2)pageHeader

home.jsp —— 头部页面;

3)pageLeft

home.jsp —— 左部页面;

4)pageMid

home.jsp —— 中部删除页面;

mod.jsp —— 中部修改页面;

5)pageRight

home.jsp —— 右部页面。

(3)src部分的结构

JavaWeb Demo:增、删、改、查_第18张图片

 其中,各java类的功能含义为:

1)entity

Person —— 人员类;

2)database

Database —— 数据库连接类,由jdbc实现;

3)dao

PersonDao —— 人员dao层接口;

imp/PersonDaoImp —— 人员dao层实现类;

4)service

PersonService ——人员service层接口;

imp/PersonServiceImp —— 人员service层实现类;

5)servlet,访问路径均采用注解配置

AddServlet —— 添加信息;

DeleteServlet —— 删除信息;

OldRecordServlet —— 得到原记录信息;

SelectAllServlet —— 得到全部记录信息;

SelectOneServlet —— 得到一个记录信息;

UpdateServlet —— 修改信息。

3.功能实现的过程

(1)添加信息

JavaWeb Demo:增、删、改、查_第19张图片

用户在页面的一个form表单中输入了编号、姓名、性别等信息,点击提交后,访问并将表单数据传输到AddServlet。在AddServlet中,首先获取到页面输入的编号、姓名、性别等信息值,然后验证编号所属的记录是否在数据库中已存在,若不存在,将数据实例化为对象,加入数据库;若已存在,不做操作,给出页面提示信息。

(2)删除信息

JavaWeb Demo:增、删、改、查_第20张图片

先查询出一条记录,再删除。

查询过程:用户在页面的一个表单中输入要查询的编号,点击提交,将编号传到SelectOneServlet;SelectOneServlet获取到编号后,在数据库中查询出相对应的记录信息,然后以请求转发的方式将记录信息返回页面;页面用EL表达式的方式接收到该条记录。

删除过程:用户点击删除按钮,访问并将记录的编号传到DeleteServlet;在DeleteServlet中,首先接收到页面传来的编号,然后在数据库中删除与之对应的记录,并在页面给出提示消息。

(3)修改信息

JavaWeb Demo:增、删、改、查_第21张图片

先查询出一条记录,再修改。

查询过程:同删除中的描述。

修改过程:用户点击修改按钮,访问将记录的编号传到OldRecordServlet;在OldRecordServlet中,接收到编号,在数据库中查询出相对应的记录,将记录信息返回给修改页面mod.jsp。mod.jsp接收到该记录,并将信息直接地置在表单中,用户修改信息后,点击提交,将信息传至UpdateServlet;UpdateServlet接收到页面的表单信息后,将数据实例化为对象,更新数据库的此条记录,并在页面给出提示消息。

(4)查询信息

在右部页面,查询得到了所有的记录信息

JavaWeb Demo:增、删、改、查_第22张图片

用户点击“点击查看全部信息”按钮;后台接收到请求,查询出数据库中的全部记录,将记录信息返回页面;页面用EL表达式的方式接收信息并展示。

4.源程序

前端

前端使用标签将页面分为四个独立的部分:头部、左部、中部、右部。

(1)index.jsp —— 总页面


  
    JavaWeb Demo1
  

  
    
    
      
      
      
    
  

(2)pageHeader/home.jsp —— 头部



    Title


    

JavaWebDemo1:增、删、改、查

(3)pageLeft/home.jsp —— 左部



    Title


    

添加信息

编号:
姓名:
性别:  男   女 <%-- 单选框方法:两个input设置成一样的name值 加入空格:  默认选中:加入checked属性。 --%>

(4)

  • pageMid/home.jsp —— 中部删除页


    <%--删除按钮和修改按钮的响应函数--%>
    


更改信息 —— 先查询,再删除、修改

编号:
编号 姓名 性别 操作
${person.number} ${person.name}
  • pageMid/mod.jsp —— 中部修改页





    

修改信息

编号:
姓名:
性别:  男   性别:  男  

(5)pageRight/home.jsp —— 右部






    

点击查看全部信息

内容为空!

编号 姓名 性别
${person.number} ${person.name}

后台

(1)实体类Person

public class Person {
    private String number;
    private String name;
    private boolean gender;

    //无参构造方法
    public Person() {
    }

    //全参构造方法
    public Person(String number, String name, boolean gender) {
        this.number = number;
        this.name = name;
        this.gender = gender;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public boolean isGender() {
        return gender;
    }

    public void setGender(boolean gender) {
        this.gender = gender;
    }
}

(2)数据库连接类database,由jdbc实现

public class Database {
    public static Connection conn(){
        //定义地址,"jdbc:mysql://ip地址:端口号/数据库名"
        String url = "jdbc:mysql://localhost:3306/javawebdemo1";
        Connection connection = null;
        try {
            //加载驱动
            Class.forName("com.mysql.jdbc.Driver");
            //建立连接,用户名:root,密码:hello
            connection = DriverManager.getConnection(url, "root", "hello");
        }catch (SQLException e){
            e.printStackTrace();
        }catch (ClassNotFoundException e){
            e.printStackTrace();
        }
        return connection;
    }
}

(3)dao层,先定义接口,再完成实现类

接口:

public interface PersonDao {
    //增加
    public int addPerson(Person person);

    //删除
    public int delete(Person person);

    //修改
    public int update(Person person);

    //查询一个
    public Person selectone(Person person);

    //查询全部
    public List selectall(Person person);
}

实现类:

public class PersonDaoImp implements PersonDao {

    Connection con = null;
    PreparedStatement ps = null;
    ResultSet rs = null;

    @Override
    public int addPerson(Person person) {
        int a = 0;
        try {
            con = Database.conn(); //连接数据库
            String sql = "insert into person values(?, ?, ?)"; //设置sql语句的字符串
            ps = con.prepareStatement(sql); //解析sql语句
            ps.setString(1, person.getNumber()); //为第一个位置赋值
            ps.setString(2, person.getName()); //为第二个位置赋值
            ps.setBoolean(3, person.isGender()); //为第三个位置赋值
            a = ps.executeUpdate(); //执行sql语句,返回的改变的行数。这里,插入记录成功后,返回1;否则返回0。
        }catch (SQLException e){
            e.printStackTrace();
        }
        return a;
    }

    @Override
    public int delete(Person person) {
        int a = 0;
        try {
            con = Database.conn();
            String sql = "delete from person where number=?";
            ps = con.prepareStatement(sql);
            ps.setString(1, person.getNumber());
            a = ps.executeUpdate();
        }catch (SQLException e){
            e.printStackTrace();
        }
        return a;
    }

    @Override
    public int update(Person person) {
        int a = 0;
        try {
            con = Database.conn();
            String sql = "update person set number=?, name=?, gender=? where number=?";
            ps = con.prepareStatement(sql);
            ps.setString(1, person.getNumber());
            ps.setString(2, person.getName());
            ps.setBoolean(3, person.isGender());
            ps.setString(4, person.getNumber());
            a = ps.executeUpdate();
        }catch (SQLException e){
            e.printStackTrace();
        }
        return a;
    }

    @Override
    public Person selectone(Person person) {
        Person person1 = new Person();
        try {
            con = Database.conn();
            String sql = "select * from person where number=?";
            ps = con.prepareStatement(sql);
            ps.setString(1, person.getNumber());
            rs = ps.executeQuery();
            if (rs.next()){
                person1.setNumber(rs.getString("number"));
                person1.setName(rs.getString("name"));
                person1.setGender(rs.getBoolean("gender"));
            }else {
                return null;
            }
        }catch (SQLException e){
            e.printStackTrace();
        }
        return person1;
    }

    @Override
    public List selectall(Person person) {
        List list = new ArrayList<>();
        try {
            con = Database.conn();
            String sql="select * from person";
            ps = con.prepareStatement(sql);
            rs = ps.executeQuery();
            while (rs.next()){
                Person person1 = new Person(rs.getString("number"),
                        rs.getString("name"),
                        rs.getBoolean("gender"));
                list.add(person1); //存入list的,是每个对象的地址
            }
        }catch (SQLException e){
            e.printStackTrace();
        }
        return list;
    }

}

 (4)service层,先定义接口,再完成实现类

接口:

public interface PersonService {
    //增加
    public int addPerson(Person person);

    //删除
    public int delete(Person person);

    //修改
    public int update(Person person);

    //查询一个
    public Person selectone(Person person);

    //查询全部
    public List selectall(Person person);
}

实现类:

public class PersonServiceImp implements PersonService {

    PersonDao personDao = new PersonDaoImp();

    @Override
    public int addPerson(Person person) {
        int a = personDao.addPerson(person);
        return a;
    }

    @Override
    public int delete(Person person) {
        int a = personDao.delete(person);
        return a;
    }

    @Override
    public int update(Person person) {
        int a = personDao.update(person);
        return a;
    }

    @Override
    public Person selectone(Person person) {
        Person person1 = personDao.selectone(person);
        return person1;
    }

    @Override
    public List selectall(Person person) {
        List list = personDao.selectall(person);
        return list;
    }
}

(5)servlet层,访问路径采用注解配置

AddServlet —— 添加信息:

@WebServlet("/AddServlet")
public class AddServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //设置请求响应的编码
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=utf-8");

        PersonService personService = new PersonServiceImp();

        String number = request.getParameter("number"); //获取页面输入的编号
        String name = request.getParameter("name"); //获取页面输入的姓名
        String gender_str = request.getParameter("gender"); //获取页面输入的性别值
        boolean gender = Boolean.valueOf(gender_str); //将性别值转化为布尔类型

        //判断该编号所属的记录是否已存在,若不存在,加入记录
        Person person0 = new Person();
        person0.setNumber(number);
        Person person = personService.selectone(person0);

        PrintWriter printWriter = response.getWriter();
        if (person == null){ //该编号所属的记录不存在,可加入
            Person person1 = new Person(number,name,gender);  //全参构造初始化
            int a = personService.addPerson(person1); //加入数据库
            if (a > 0){ //添加成功
                printWriter.print("");
            }else { //添加失败
                printWriter.print("");
            }
        }else { //该编号所属的记录已存在,不可加入
            printWriter.print("");
        }

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

DeleteServlet —— 删除信息:

@WebServlet("/DeleteServlet")
public class DeleteServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置请求响应的编码
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=utf-8");

        PersonService personService = new PersonServiceImp();

        String number = request.getParameter("number"); //获取页面输入的编号
        Person person0 = new Person();
        person0.setNumber(number);
        int a = personService.delete(person0);
        PrintWriter printWriter = response.getWriter();
        if (a > 0){ //删除成功
            printWriter.print("");
        }else { //删除失败
            printWriter.print("");
        }

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

OldRecordServlet —— 得到原记录信息:

@WebServlet("/OldRecordServlet")
public class OldRecordServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置请求响应的编码
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=utf-8");

        PersonService personService = new PersonServiceImp();

        String number = request.getParameter("number"); //获取页面输入的编号
        Person person0 = new Person();
        person0.setNumber(number);
        Person person = personService.selectone(person0);

        request.setAttribute("person", person);
        request.getRequestDispatcher("/pageMid/mod.jsp").forward(request, response);

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

SelectAllServlet —— 得到全部记录信息:

@WebServlet("/SelectAllServlet")
public class SelectAllServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置请求响应的编码
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=utf-8");

        PersonService personService = new PersonServiceImp();
        List personList = personService.selectall(null);
        request.setAttribute("personList", personList);
        request.getRequestDispatcher("/pageRight/home.jsp").forward(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

SelectOneServlet —— 得到一个记录信息:

@WebServlet("/SelectOneServlet")
public class SelectOneServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置请求响应的编码
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=utf-8");

        PersonService personService = new PersonServiceImp();

        String number = request.getParameter("number"); //获取页面输入的编号
        Person person0 = new Person();
        person0.setNumber(number);
        Person person = personService.selectone(person0);

        PrintWriter printWriter = response.getWriter();
        if (person != null){
            request.setAttribute("person", person);
            request.getRequestDispatcher("/pageMid/home.jsp").forward(request, response);
        }else {
            printWriter.print("");
        }

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

UpdateServlet —— 修改信息:

@WebServlet("/UpdateServlet")
public class UpdateServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置请求响应的编码
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=utf-8");

        PersonService personService = new PersonServiceImp();

        String number = request.getParameter("number"); //获取页面输入的编号
        String name = request.getParameter("name"); //获取页面输入的姓名
        String gender_str = request.getParameter("gender"); //获取页面输入的性别值
        boolean gender = Boolean.valueOf(gender_str); //将性别值转化为布尔类型

        Person person1 = new Person(number, name, gender);
        int a = personService.update(person1);

        PrintWriter printWriter = response.getWriter();
        if (a > 0){ //修改成功
            printWriter.print("");
        }else { //修改失败
            printWriter.print("");
        }

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

 三、总结

1.本文提供了一个关于javaweb增、删、改、查完整的示例程序。

2.本文的基本特点有:a.基于MVC开发模式;b.开发过程力求高内聚、低耦合;c.面向对象的编程思想。前端使用了frameset标签进行分页操作;后台功能分dao、service、servlet三层结构完成;数据库建立了一张数据表,由字符串类型做主键,提高了对数据的兼容性。

3.规范的开发方式和习惯能够有效地释放开发过程中的思维量,提高效率。

你可能感兴趣的:(Java,Web,学习笔记,JavaWeb,增删改查,demo,示例程序,MVC模式)