jsp实现增删改查——(一)配置环境、显示全部学生信息

admin2024-04-03  0

学生信息CRUD——配置环境,编写list.jsp

新建项目

1.使用IDEA2020版,新建项目时要有Java Enterprise。(太新版的如2023版就没有)

2.新建项目。

jsp实现增删改查——(一)配置环境、显示全部学生信息,image-20240403104612507,第1张

jsp实现增删改查——(一)配置环境、显示全部学生信息,image-20240403104622789,第2张

目录结构

jsp实现增删改查——(一)配置环境、显示全部学生信息,image-20240403104811902,第3张

1.建立css目录,将bootstrap.css放入,便于后续使用。

2.建立lib目录,将mysql-connector-java-5.1.6.jar放入。(该文件在Tomcat文件夹的lib目录中)

注意,放入后无法直接使用(如下图,此时的状态并不是一个目录,无法打开)

jsp实现增删改查——(一)配置环境、显示全部学生信息,image-20240403105032443,第4张

需要右键,点击Add as library,之后才能正常使用(如下图,同时它变成了一个可打开的目录状态)。

jsp实现增删改查——(一)配置环境、显示全部学生信息,image-20240403105104837,第5张

jsp实现增删改查——(一)配置环境、显示全部学生信息,image-20240403105138986,第6张

3.建立student目录,我们要写的jsp代码就放在里面。

注意命名格式,如list.jspadd.jsp这种不带后缀的,主要负责前端页面显示,中间会穿插部分功能代码。

而例如add_success.jspupd_success.jsp这种带后缀的,都是只负责实现后端函数,供前端调用的。

功能模块实现

学生信息展示list.jsp

数据库

使用Navicat,在数据库中新建一个student表。

表中有四个字段:

字段名类型备注
sidint学生ID;主键,非空,自动递增
snamevarchar(20)学生姓名
moneydouble生活费
birthdaydate出生日期
代码
head内容
<head>
    <title>学生信息列表</title>
    <link href="../css/bootstrap.css" rel="stylesheet">
</head>
body内容
各个标签说明

1.table标签

<table class="table table-bordered table-cover" style="width: 50%" align="center">
	......
</table>

2.caption标签

<caption>
    <h2><center>学生信息展示</center></h2>
</caption>

3.tr标签

<tr> 标签定义 HTML 表格中的行。

<tr> 元素包含一个或多个元素。

4.td标签

<td> 标签定义 HTML 表格中的标准数据单元格。

HTML 表格有两种单元格:

  • 标题单元格 - 包含标题信息(使用<th>元素创建)
  • 数据单元格 - 包含数据(使用 <td> 元素创建)

默认情况下,<td> 元素中的文本是普通的,并且左对齐。

元素中的文本默认为粗体且居中。
<tr>
    <td>学号</td>
    <td>姓名</td>
    <td>生活费</td>
    <td>出生日期</td>
    <td>操作</td>
</tr>

后续,应当由数据库动态地生成每一行学生信息,如下所示:

<tr>
    <td>(数据库中第k个学生的sid)</td>
    <td>(数据库中第k个学生的sname)</td>
    <td>(数据库中第k个学生的money)</td>
    <td>(数据库中第k个学生的birthday)</td>
    <td>(一些操作按钮,例如添加、修改、删除等)</td>
</tr>

接下来,问题就是如何在jsp文件里链接数据库,获取数据、并显示出来。

获取ResultSet对象
Class.forName("org.gjt.mm.mysql.Driver");
Connection conn = DriverManager("jdbc:mysql://localhost:3306/mywork", "root", "123456");
PreparedStatement pstmt = conn.prepareStatement("select * from student");
ResultSet rs = pstmt.executeQuery();

总结

ResultSet类,是Java JDBC编程中的一个核心类,用于处理查询结果。

ResultSet是Java中的一个接口,它代表了一个数据库查询的结果集。结果集通常是一个表格,包含了一组行和列,这些行和列包含了查询所返回的数据。可以通过ResultSet对象的方法来遍历和操作查询结果。

三个步骤:

1)建立数据库连接。

2)创建一个Statement对象,用于执行SQL查询。

3)执行SQL查询,获得一个ResultSet对象。


ResultSet常用操作

1.resultSet.next()

ResultSet对象中有一个光标,初始位置在第一行之前。可以使用next()方法将光标移动到下一行,如果存在下一行数据,该方法返回true,否则返回false

while (resultSet.next()) {
    // 遍历每一行数据
}

2.resultSet.getObject()

resultSet.getObject()作用是从结果集中获取指定列的值,并以Object类型返回。

用完后关闭
rs.close();
pstmt.close();
conn.close();
如何动态获得数据库数据

1.用<% (表达式) %>将Java代码括起来。注意,不要把html的内容也括进来。

2.建立数据库链接,获取ResultSet对象。

3.<%= %>为输出表达式。用<%= (表达式) %>输出数据。注意:“=”号前不能有空格,表达式后不需要打分号。

4.用完后关闭链接。

因此,代码如下:

<%
	Class.forName("org.gjt.mm.mysql.Driver");
	Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mywork", "root", "123456");
	PreparedStatement pstmt = conn.prepareStatement("select * from student");
	ResultSet rs = pstmt.executeQuery();
	while(rs.next())
    {
%>

<tr>
    <td><%= rs.getObject("sid") %></td>
    <td><%= rs.getObject("sname") %></td>
    <td><%= rs.getObject("money") %></td>
    <td><%= rs.getObject("birthday") %></td>
    <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" clss="btn-success">添加</a>
    </td>
</tr>

<%
	}
	rs.close();
	pstmt.close();
	conn.close();
%>

对三个操作按钮的说明

1.使用<a>标签

在HTML中,<a>标签用于创建超链接,其基本结构如下:

<a href="目标地址"> 链接文本 </a>

  • href属性: 指定链接的目标地址。可以是一个绝对URL(以 http:// 或 https:// 开头)、相对URL(相对于当前页面的路径)或者一个锚点(页面内跳转)。
  • 链接文本: 用户点击的可见文本内容。

2.设置href属性

对于“添加”操作,其点击后的效果是,跳转到一个“填写相应学生信息”的新页面,至于提交与否,在新页面中再去考虑。因此,href = "add.jsp",是一个前端页面。

对于“修改”操作,与添加操作是类似的,但区别在于,修改操作所跳转到的页面,并不是一些空白的输入框,而是显示用户当前信息的输入框。因此,修改操作跳转后的页面,相当于添加操作跳转到的页面的基础之上进行查询操作。——所以,你也要告诉它查询的是哪个用户的信息,即传递参数sid。(如何传参,看下面)

注意:对于“删除”操作,其点击后的效果是,该条数据从数据库中删除,而并非页面跳转,因此,它是href = "del_success.jsp"(注,之前也说过,带有_success后缀的jsp文件主要实现函数功能而非页面展示),点击后执行其中函数功能,从而将数据从数据库中删除。但问题是,点击这个删除按钮,怎么就知道删除的是这个学生的数据?——所以,在删除的href链接中要“传参”,即在原链接后接"?"符号,在其后跟上要传递的参数,即?sid=<%=rs.getObject("sid")%>。同样地,传递的sid也是从数据库中获取的。

list.jsp完整代码

<%@ page import="java.sql.*" %><%--
  Created by IntelliJ IDEA.
  User: 11202
  Date: 2024/4/3
  Time: 10:43
  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>
    <table class="table table-bordered table-hover" style="width: 50%" align="center">
        <caption>
            <h2><center>学生信息表</center></h2>
        </caption>
        <tr>
            <td>学号</td>
            <td>姓名</td>
            <td>生活费</td>
            <td>出生日期</td>
            <td>操作</td>
        </tr>
        <%
            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");
            ResultSet rs = pstmt.executeQuery();
            while(rs.next())
            {
        %>

        <tr>
            <td><%= rs.getObject("sid") %></td>
            <td><%= rs.getObject("sname") %></td>
            <td><%= rs.getObject("money") %></td>
            <td><%= rs.getObject("birthday") %></td>
            <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>
        </tr>

        <%
            }
            rs.close();
            pstmt.close();
            conn.close();
        %>
    </table>
</body>
</html>
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明原文出处。如若内容造成侵权/违法违规/事实不符,请联系SD编程学习网:675289112@qq.com进行投诉反馈,一经查实,立即删除!