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

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

新建项目

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

2.新建项目。

image-20240403104612507

image-20240403104622789

安装JDK8,Tomcat8,MySql8,IDEA2020,Navicat

目录结构

image-20240403104811902

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

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

注意:mysql-connector-java,必须与你的MySQL版本相匹配。例如此处该文件对应的MySQL版本为5.x。若MySQL版本为8.x,则应该换成相对应版本的connector,否则会出错。——另外,对于不同版本的mysql-connector-java文件,其初始建立链接的代码会不同。本文是按照5.1.6所写的。

具体怎么改,见此文:https://blog.csdn.net/cjnorth/article/details/130479803

这个驱动文件一定要和自己的MySQL版本一致,否则会出问题。

查看自己的MySQL版本:

image-20240403125745533

到官网下载对应驱动:https://dev.mysql.com/downloads/connector/j/

点击Archieves,选择历史版本下载。下图中,选择Operating System为Platform Independent,下载zip格式的。

image-20240403125724426

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

image-20240403105032443

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

image-20240403105104837

image-20240403105138986

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

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

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

功能模块实现

学生信息展示list.jsp

数据库

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

表中有四个字段:

字段名类型备注
sidint学生ID;主键,非空,自动递增
snamevarchar(20)学生姓名
moneydouble生活费
birthdaydate出生日期
代码

在student目录下,新建一个list.jsp文件。

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

1.设置title标签内容,标题。

2.使用link标签,设置属性href将刚才准备好的css引入过来,便于前端页面的美观;设置属性rel="stylesheet"(这个不太清楚原因,但都要这样设一下)。

body内容

目的是实现一个列表清单,上面显示数据库student表中所有人的(学号,姓名,生活费,出生日期)

因此,前端主要使用<table>标签,实现一个表格的显示。

各个标签说明

1.table标签

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

对table标签定义相关属性,可修改其css样式,如上所示。

2.caption标签

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

<caption> 标签定义表格标题。

caption 标签必须紧随 table 标签之后。您只能对每个表格定义一个标题。

同时,使用h2标签让字变大,使用center标签让字居中。

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对象

首先,它本质上是在编写Java代码。

jsp文件的特点是Java代码与前端代码可以写在同一个文件里。

写Java代码的部分,用<% 表达式 %>括起来即可。

Class.forName("org.gjt.mm.mysql.Driver");

不太清楚这句话的原理,但它应该是和这个文件有关。

image-20240403112100504

因此,如果使用的驱动文件不是这个版本的,那么它对应的目录文件也会不同,所以这句代码引号中的内容并不是固定不变的。

例如,对于MySQL8.0版本,这句话就要写Class.forName("com.mysql.cj.jdbc.Driver");或者不写也可以。

Connection conn = DriverManager("jdbc:mysql://localhost:3306/mywork", "root", "123456");

Java DriverManager.getConnection()方法:获取数据库连接。

Connection(String url,String user,String password)

  • url:访问数据库的 URL 路径。
    • jdbc:mysql://localhost:3306/mywork
    • 3306是MySQL端口号,mywork是我创建的数据库名称。
  • user:是访问数据库的用户名。
    • root
  • password:连接数据库的密码。
    • 123456

注意:三个参数都是字符串类型,都必须用双引号引起来。

PreparedStatement pstmt = conn.prepareStatement("select * from student");

PreparedStatement是Java JDBC API的一部分,它提供了一种更有效率和安全的方式来向SQL语句传递参数。PreparedStatement允许我们执行带有动态参数的SQL语句,这些参数可以在执行SQL语句之前预编译,从而提高执行效率。PreparedStatement对象可以通过Connection对象创建,并接受一条SQL语句作为参数。

PreparedStatement还提供了一种用于执行查询的方法executeQuery(),以及用于执行非查询的方法executeUpdate()。

ResultSet rs = pstmt.executeQuery();

executeQuery()方法是处理查询操作,当用select对数据库做查询时,用该方法。且executeQuery()方法会建立一个ResultSet的对象保存查询的结果。

Insert、Update、delete等操作,可用executeUpdate()方法执行。


总结

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();

在使用完ResultSet后,务必记得关闭它,以释放相关资源。关闭顺序通常是先关闭ResultSet,然后是Statement,最后是Connection

如何动态获得数据库数据

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>
  • 22
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

秋秋秋叶

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

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

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

打赏作者

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

抵扣说明:

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

余额充值