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

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

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

<td>
    <a href="del_success.jsp?sid=<%= rs.getObject("sid") %>" class="btn btn-danger" >删除</a>
    <a href="upd.jsp?sid=<%= rs.getObject("sid") %>>" class="btn btn-primary">修改</a>
    <a href="add.jsp" class="btn btn-success">添加</a>
</td>

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

一、添加学生页面add.jsp

使用到的标签

1.form标签

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

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

<form>表单标签  
    <input type="text">表单域    
    <button type="submit">提交按钮</button >
</form>

2.form标签属性

  • action:发送数据的地址
  • name:表单名称
  • method:提交方式
    • Get:提交的数据url可以看到,用于提交少量数据
    • Post:提交的数据url看不到,用于提交大量数据
<form action="#" name="login" method="POST"></form>

3.input标签

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

4.下拉菜单select option

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

 下拉菜单:
    <select>
        <option>广州市</option>
        <option>海珠区</option>
        <option>荔湾区</option>
        <option selected>增城区</option>
        <option>越秀区</option>
    </select>

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

页面主要内容

与之前“显示学生信息”不同,此处需要将数据提交给服务器,因此需要使用<form>标签来设计整体框架。

form表单之内,显示的是一个<table>表格,包含每行<tr>,每行中的表项<td>,表项当中的<input>输入框,最终的提交按钮等。

head内容

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

<head>
    <title>添加学生信息</title>
    <link href="../css/bootstrap.css" rel="stylesheet">
</head>
body内容

1.form表单

<body>
    <form action="add_success.jsp">
    	//内容
    </form>
</body>

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

2.table表格

<body>
    <form action="add_success.jsp">
        <table class="table table-bordered table-hover" style="width: 50%" align="center">
        	//表格内容
        </table>
    </form>
</body>

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

<caption>
    <h2><center>学生信息添加</center></h2>
</caption>

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

<tr>
    <td>姓名</td>
    <td>
    	<input type="text" name="sname" class="form-control">
    </td>
</tr>
<tr>
    <td>生活费</td>
    <td>
    	<input type="text" name="money" class="form-control">
    </td>
</tr>
<tr>
    <td>出生日期</td>
    <td>
    	<input type="date" name="birthday">
    </td>
</tr>
<tr>
    <td></td>
    <td>
    	<input type="submit" value="添加" class="btn btn-success">
        <input type="reset" value="重置" class="btn btn-success">
    </td>
</tr>

注:每个标签的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" %>
<html>
<head>
    <title>学生信息添加</title>
    <link href="../css/bootstrap.css" rel="stylesheet">
</head>
<body>
    <form action="add_success.jsp">
        <table class="table table-bordered table-hover" style="width: 50%" align="center">
            <caption>
                <h2><center>学生信息添加</center></h2>
            </caption>
            <tr>
                <td>姓名</td>
                <td>
                    <input type="text" name="sname" class="form-control">
                </td>
            </tr>
            <tr>
                <td>生活费</td>
                <td>
                    <input type="text" name="money" class="form-control">
                </td>
            </tr>
            <tr>
                <td>出生日期</td>
                <td>
                    <input type="date" name="birthday" class="form-control">
                </td>
            </tr>
            <tr>
                <td></td>
                <td>
                    <input type="submit" value="提交" class="btn btn-success">
                    <input type="reset" value="重置" class="btn btn-warning">
                </td>
            </tr>
        </table>
    </form>
</body>
</html>

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

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

方法:request.getParameter()

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

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

举例

<form action="xxx" >
 
    <input name="name" value="hello word"/>

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

这个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语句了。

<a href="upd.jsp?sid=<%= rs.getObject("sid") %>>" class="btn btn-primary">修改</a>

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

页面主要内容

head内容
<head>
    <title>修改学生信息</title>
    <link href="../css/bootstrap.css" rel="stylesheet">
</head>
body内容
<form action="upd_success.jsp">
    <table class="table table-bordered table-hover" style="width: 50%" align="center">
        <caption>
            <h2><center>学生信息添加</center></h2>
        </caption>
        <%
        	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())
            {
        %>
        <tr>
            <td>学号</td>
            <td>
            	<input type="text" name="sid" class="form-control" value="<%=rs.getObject("sid")%>" readonly>
            </td>
        </tr>
        <tr>
            <td>姓名</td>
            <td>
            	<input type="text" name="sname" class="form-control" value="<%=rs.getObject("sname")%>">
            </td>
        </tr>
        <tr>
            <td>生活费</td>
            <td>
            	<input type="text" name="money" class="form-control" value="<%=rs.getObject("money")%>">
            </td>
        </tr>
        <tr>
            <td>出生日期</td>
            <td>
            	<input type="date" name="birthday" value="<%=rs.getObject("birthday")%>">
            </td>
        </tr>
        <tr>
            <td></td>
            <td>
            	<input type="submit" value="提交" class="btn btn-success">
                <input type="reset" value="重置" class="btn btn-warning">
            </td>
        </tr>
        <%
        	}
        	rs.close();
        	pstmt.close();
        	conn.close();
        %>
    </table>
</form>

四、学生信息修改操作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代码。

<a href="del_success.jsp?sid=<%= rs.getObject("sid") %>" class="btn btn-danger" >删除</a>

获取参数

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");
%>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋秋秋叶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值