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

新建项目

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

2.新建项目。

安装JDK8,Tomcat8,MySql8,IDEA2020,Navicat

目录结构

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版本:

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

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

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

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

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

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

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

功能模块实现

学生信息展示list.jsp

数据库

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

表中有四个字段:

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

代码

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

head内容

学生信息列表

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

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

body内容

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

因此,前端主要使用

标签,实现一个表格的显示。

各个标签说明

1.table标签

......

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

2.caption标签

学生信息展示

标签定义表格标题。

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

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

3.tr标签

标签定义 HTML 表格中的行。

元素包含一个或多个元素。

4.td标签

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

HTML 表格有两种单元格:

标题单元格 - 包含标题信息(使用元素创建)数据单元格 - 包含数据(使用 元素创建)

默认情况下, 元素中的文本是普通的,并且左对齐。 元素中的文本默认为粗体且居中。

学号

姓名

生活费

出生日期

操作

上面代码是表格第一行的内容,即表头。

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

(数据库中第k个学生的sid)

(数据库中第k个学生的sname)

(数据库中第k个学生的money)

(数据库中第k个学生的birthday)

(一些操作按钮,例如添加、修改、删除等)

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

获取ResultSet对象

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

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

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

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

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

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

例如,对于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/mywork3306是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())

{

%>

<%= rs.getObject("sid") %>

<%= rs.getObject("sname") %>

<%= rs.getObject("money") %>

<%= rs.getObject("birthday") %>

" class="btn btn-danger">删除

" class="btn btn-primary">修改

添加

<%

}

rs.close();

pstmt.close();

conn.close();

%>

对三个操作按钮的说明

1.使用标签

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

链接文本

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

学生信息列表

<%

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

{

%>

<%

}

rs.close();

pstmt.close();

conn.close();

%>

学生信息表

学号姓名生活费出生日期操作
<%= rs.getObject("sid") %><%= rs.getObject("sname") %><%= rs.getObject("money") %><%= rs.getObject("birthday") %>

" class="btn btn-danger" >删除

>" class="btn btn-primary">修改

添加

精彩内容

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。

大家都在找:

java:java官网

jsp:jspp聊天软件

html:html用什么软件打开