jsp实现增删改查——(二)添加、修改、删除学生信息

学生信息CRUD——添加、修改、删除

在上一小节中,我们写好了list.jsp,用一个table表格显示数据库student表中的各个学生的(学号,姓名,生活费,出生日期),并对表格每一行的数据都配有三个操作按钮——删除、修改、增加。

 "  >删除
    >" >修改
    添加

此处,讨论add.jsp与upd.jsp页面内容该如何呈现。

一、添加学生页面add.jsp

使用到的标签

1.form标签

表单在网页中主要负责数据采集功能。HTML中的标签,就是用于采集用户输入的信息,并且通过标签的提交操作,把采集到的信息提交到服务器端进行处理。

一个完整的表单应该由3部分组成:表单标签、表单域(输入框)、提交按钮。

表单标签 表单域

2.form标签属性

  • action:发送数据的地址
  • name:表单名称
  • method:提交方式
    • Get:提交的数据url可以看到,用于提交少量数据
    • Post:提交的数据url看不到,用于提交大量数据

      3.input标签

      type属性值说明
      text文本框,用于输入单行文本
      password密码框
      radio单选框
      checkbox多选框
      file上传文件
      date日期选择框
      • value的作用:
        • 预先填充表单中的字段值,方便用户进行编辑或提供默认值;
        • 方便以后将这些值传递给服务器进行处理。

          4.下拉菜单select option

          注意:如果需要设置默认选中,则需要添加selected属性值。

           下拉菜单: 

          注:上次说过的标签,如table、tr、td等,此处不再说明。

          页面主要内容

          与之前“显示学生信息”不同,此处需要将数据提交给服务器,因此需要使用

          标签来设计整体框架。

          在form表单之内,显示的是一个

          表格,包含每行,每行中的表项

          设置各行,每行为:文字提示 + 对应输入框。

          注:每个标签的name尽量起的和数据库表中字段名一致,以免不必要的麻烦。

          完整的add.jsp代码

          <%--
            Created by IntelliJ IDEA.
            User: 11202
            Date: 2024/4/3
            Time: 13:12
            To change this template use File | Settings | File Templates.
          --%><%@ page contentType="text/html;charset=UTF-8" language="java" %> 学生信息添加  
          ,表项当中的输入框,最终的提交按钮等。

          head内容

          与list.jsp同样,head的内容也包含两部分。

           添加学生信息 
          body内容

          1.form表单

            //内容 

          设置action="add_success.jsp"属性,在表单提交后,转向该jsp文件执行相应处理。

          2.table表格

           
          //表格内容

          表格标题,用caption标签设置,如下。

          学生信息添加

          姓名
          生活费
          出生日期

          学生信息添加

          姓名
          生活费
          出生日期

          二、学生信息插入操作add_success.jsp

          这个文件主要是写Java函数代码,直接将html相关内容删除,只写<% %>内的内容。

          方法:request.getParameter()

          (1)request.getParameter() 取得是通过容器的实现来取得通过类似post,get等方式传入的数据,request.setAttribute()和getAttribute()只是在web容器内部流转,仅仅是请求处理阶段。

          (2)request.getParameter() 方法传递的数据,会从Web客户端传到Web服务器端,代表HTTP请求数据。

          举例

          这个form提交请求后,在你的action中String name = request.getparameter("name");

          那么name的值就是“hello word”。

          因此,实际上来说,标签的name起成什么,和数据库字段无关,标签的name只是用于request.getParameter("[标签的name]")来将其传递给变量的。至于与数据库交互,数据库中的字段名是什么,后续处理才需要考虑。

          但是,为了避免麻烦、混淆,将这些name统统与数据库字段名保持一致即可。

          链接数据库

          和之前list.jsp一样,大概是三个步骤。

          Class.forName("com.mysql.cj.jdbc.Driver");
          Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mywork", "root", "123456");
          PreparedStatement pstmt = conn.prepareStatement("insert into student(sname, money, birthday) values(?,?,?)");
          

          注意:对于PreparedStatement中,insert的SQL语句的书写,需要用到“占位符”。需要将插入的确切值都用“?”即占位符来替换。

          之后我们使用setObject()方法来填充我们的占位符。

          方法:setObject()

          • 作用:给SQL语句的占位符赋值的。
          • 优点:也有setString()方法,setInt()方法…但是如果数据很多,类型不一致,这样就需要一个一个判断,就很麻烦,所以直接使用setObject()方法,因为它可以自动识别数据类型,就很方便,提高了效率。
          • 语法:setObject(索引, 值)。其中,索引是从1开始的,分别对应每个占位符。即,索引为1,就对应第一个“?”,索引为5,就对应第五个“?”。——因此,当你需要操作新的字段时,不能一味地往后加索引,也有可能字段是在中间新插入的,索引需要从中间某处开始重新设置。

            填充占位符

            pstmt.setObject(1, sname);
            pstmt.setObject(2, money);
            pstmt.setObject(3, birthday);
            

            执行提交的SQL语句,方法:executeUpdate()

            • 方法1:executeQuery()
              • 这个方法被用来执行 SELECT 语句,但也只能执行查询语句。
              • 执行后返回代表查询结果的ResultSet对象。
              • 方法2:executeUpdate()
                • 用于执行 INSERT、UPDATE 或 DELETE 语句以及 SQL DDL(数据定义语言)语句,例如 CREATE TABLE 和 DROP TABLE。INSERT、UPDATE 或 DELETE 语句的效果是修改表中零行或多行中的一列或多列。
                • executeUpdate 的返回值是一个整数(int),指示受影响的行数(即更新计数)。
                • 对于 CREATE TABLE 或 DROP TABLE 等不操作行的语句,executeUpdate 的返回值总为零。
                  pstmt.executeUpdate();
                  

                  关闭链接

                  pstmt.close();
                  conn.close();
                  

                  页面跳转

                  response.sendRedirect("list.jsp");
                  

                  添加成功后,跳转回“学生信息列表”界面。

                  完整的add_success.jsp代码

                  <%@ page import="java.sql.Connection" %><%@ page import="java.sql.DriverManager" %><%@ page import="java.sql.PreparedStatement" %><%--
                    Created by IntelliJ IDEA.
                    User: 11202
                    Date: 2024/4/3
                    Time: 13:47
                    To change this template use File | Settings | File Templates.
                  --%><%@ page contentType="text/html;charset=UTF-8" language="java" %><%
                      //接收参数
                      String sname = request.getParameter("sname");
                      String money = request.getParameter("money");
                      String birthday = request.getParameter("birthday");
                      //链接数据库
                      Class.forName("com.mysql.cj.jdbc.Driver");
                      Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mywork", "root", "123456");
                      PreparedStatement pstmt = conn.prepareStatement("insert into student(sname, money, birthday) values(?,?,?)");
                      pstmt.setObject(1, sname);
                      pstmt.setObject(2, money);
                      pstmt.setObject(3, birthday);
                      pstmt.executeUpdate();
                      pstmt.close();
                      conn.close();
                      //页面跳转
                      response.sendRedirect("list.jsp");
                  %>

                  三、修改信息页面upd.jsp

                  点击“修改”按钮,跳转到学生信息页面,将其中的旧数据修改为新数据,之后点击提交,即可修改信息。

                  因此,它的实现思路是,在add.jsp基础上,将各个输入框的信息要能够“显示出旧数据”。

                  此外,它的SQL语句也有所不同,它是update语句,而不是insert语句了。

                  >" >修改
                  

                  注意,我们通过请求href,已经获取到了当前点击学生的sid,之后作处理即可。

                  页面主要内容

                  head内容
                   修改学生信息 
                  body内容
                  <% String sid = request.getParameter("sid"); Class.forName("com.mysql.cj.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mywork", "root", "123456"); PreparedStatement pstmt = conn.prepareStatement("select * from student where sid=?"); pstmt.setObject(1, sid); ResultSet rs = pstmt.executeQuery(); if(rs.next()) { %> <% } rs.close(); pstmt.close(); conn.close(); %>

                  学生信息添加

                  学号 " readonly>
                  姓名 ">
                  生活费 ">
                  出生日期 ">

                  四、学生信息修改操作upd_success.jsp

                  同理,把html相关代码全部删去,只负责写Java代码,负责前端input传递过来的数据与数据库进行交互。

                  接收参数

                  <%
                  	//接收参数
                  	String sid = request.getParameter("sid");
                  	String sname = request.getParameter("sname");
                  	String money = request.getParameter("money");
                  	String birthday = request.getParameter("birthday");
                  %>

                  链接数据库

                  Class.forName("com.mysql.cj.jdbc.Driver");
                  Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mywork", "root", "123456");
                  

                  执行SQL语句

                  PreparedStatement pstmt = conn.prepareStatement("update student set sname=?, money=?, birthday=? where sid=?");
                  pstmt.setObject(1, sname);
                  pstmt.setObject(2, money);
                  pstmt.setObject(3, birthday);
                  pstmt.setObject(4, sid);
                  pstmt.executeUpdate();
                  

                  关闭链接

                  pstmt.close();
                  conn.close();
                  

                  页面跳转

                  response.sendRedirect("list.jsp")
                  

                  完整upd_success.jsp代码

                  <%@ page import="java.sql.DriverManager" %><%@ page import="java.sql.Connection" %><%@ page import="java.sql.PreparedStatement" %><%--
                    Created by IntelliJ IDEA.
                    User: 11202
                    Date: 2024/4/3
                    Time: 15:29
                    To change this template use File | Settings | File Templates.
                  --%><%@ page contentType="text/html;charset=UTF-8" language="java" %><%
                      //传递参数
                      String sid = request.getParameter("sid");
                      String sname = request.getParameter("sname");
                      String money = request.getParameter("money");
                      String birthday = request.getParameter("birthday");
                      //建立链接
                      Class.forName("com.mysql.cj.jdbc.Driver");
                      Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mywork", "root", "123456");
                      PreparedStatement pstmt = conn.prepareStatement("update student set sname=?, money=?, birthday=? where sid=?");
                      pstmt.setObject(1, sname);
                      pstmt.setObject(2, money);
                      pstmt.setObject(3, birthday);
                      pstmt.setObject(4, sid);
                      pstmt.executeUpdate();
                      //关闭链接
                      pstmt.close();
                      conn.close();
                      //页面跳转
                      response.sendRedirect("list.jsp");
                  %>

                  五、学生信息删除操作del_success.jsp

                  由于删除的过程是,在list.jsp中,点击“删除按钮”,对应记录消失。因此,不需要设置额外的界面,而只需实现这一功能操作即可。

                  因此,不需要del.jsp,只需del_success.jsp。

                  同理,将html相关代码均删除,只写Java代码。

                  "  >删除
                  

                  获取参数

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

                  链接数据库

                  Class.forName("com.mysql.cj.jdbc.Driver");
                  Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mywork", "root", "123456");
                  

                  SQL语句执行

                  PreparedStatement pstmt = conn.prepareStatement("delete from student where sid=?");
                  pstmt.setObject(1, sid);
                  pstmt.executeUpdate();
                  

                  关闭链接

                  pstmt.close();
                  conn.close();
                  

                  页面跳转

                  response.sendRedirect("list.jsp");
                  

                  完整del_success.jsp代码

                  <%@ page import="java.sql.DriverManager" %><%@ page import="java.sql.Connection" %><%@ page import="java.sql.PreparedStatement" %><%--
                    Created by IntelliJ IDEA.
                    User: 11202
                    Date: 2024/4/3
                    Time: 15:39
                    To change this template use File | Settings | File Templates.
                  --%><%@ page contentType="text/html;charset=UTF-8" language="java" %><%
                      //传递参数
                      String sid = request.getParameter("sid");
                      String sname = request.getParameter("sname");
                      String money = request.getParameter("money");
                      String birthday = request.getParameter("birthday");
                      //建立链接
                      Class.forName("com.mysql.cj.jdbc.Driver");
                      Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mywork", "root", "123456");
                      //SQL语句
                      PreparedStatement pstmt = conn.prepareStatement("delete from student where sid=?");
                      pstmt.setObject(1, sid);
                      pstmt.executeUpdate();
                      //关闭链接
                      pstmt.close();
                      conn.close();
                      //页面跳转
                      response.sendRedirect("list.jsp");
                  %>