是不是学了 JSP 基础后,想做个带数据库的小项目却不知道从哪下手?写了代码要么连不上数据库,要么查不出数据,报错信息里的 “ClassNotFoundException”“SQLException” 看得头大?其实啊,带数据库的 JSP 项目没那么难,关键是把数据库连接这步搞懂,再配合 Servlet 和 JSP 的分工,新手也能做出来。今天兔子哥就带大家做个 “学生信息管理” 实战案例,从页面设计到数据库连接,每段代码都讲透,新手常问的 “驱动包怎么放”“连接代码怎么写” 这些问题,咱们一个个说清楚,一起往下看吧!
先说说:这个实战案例做啥?为啥选它?
基础问题:新手练数据库连接,选什么案例合适?
选个功能简单、贴近实际的案例最好,比如 “学生信息管理”—— 能查学生列表、看详情,用到 JSP 显示数据、Servlet 处理请求、数据库存数据,把核心技能都练到了。功能不复杂,新手能驾驭,做完特有成就感。
场景问题:做这个案例需要哪些准备?
得先准备好这几样:
- 装好 MySQL 数据库,建个
school数据库和student表(后面会给建表 SQL); - 下好 MySQL 驱动包(mysql-connector-java-8.0.28.jar,别下错版本);
- 开发工具用 Eclipse 或 IDEA,Tomcat 已经配置好(之前环境搭建教程里讲过)。
解决方案:没接触过数据库,能跟着做吗?
完全能!兔子哥会把建表 SQL 和连接代码都写好,你跟着复制粘贴,改改自己的数据库密码就行。重点是理解代码逻辑,不是死记硬背,多改几次参数就懂了。
案例整体框架:JSP+Servlet+MySQL 怎么配合?
这个案例分三部分,就像 “前台 - 后台 - 仓库” 的分工:
- JSP 页面:负责显示学生列表(前台展示);
- Servlet:负责从数据库查数据,传给 JSP(后台处理);
- MySQL 数据库:存学生信息(数据仓库)。
流程很简单:用户访问 JSP 页面 → JSP 请求 Servlet → Servlet 查数据库 → 数据传给 JSP 显示。这样分工清晰,代码不乱,新手好维护。
第一步:准备数据库,建表插数据
数据库是 “仓库”,得先把仓库建好,才能存数据、查数据。
步骤 1:建数据库和表
打开 MySQL 的命令行或 Navicat,执行下面的 SQL:
sql
-- 建数据库CREATE DATABASE IF NOT EXISTS school;USE school;-- 建学生表CREATE TABLE IF NOT EXISTS student (id INT PRIMARY KEY AUTO_INCREMENT, -- 学号,自动增长name VARCHAR(20) NOT NULL, -- 姓名age INT, -- 年龄major VARCHAR(30) -- 专业);-- 插几条测试数据INSERT INTO student (name, age, major) VALUES('张三', 20, '计算机'),('李四', 21, '软件工程'),('王五', 19, '大数据');执行完后,
student表里就有 3 条学生数据了,后面查数据就靠它们。步骤 2:放好 MySQL 驱动包
驱动包是 JSP 连接 MySQL 的 “钥匙”,必须放对地方:
- 在 Eclipse 里右键项目→New→Folder,建个
WEB-INF/lib文件夹; - 把下载好的
mysql-connector-java-8.0.28.jar复制到lib里; - 右键 jar 包→Build Path→Add to Build Path,Eclipse 里会显示 Referenced Libraries,说明驱动包生效了。
避坑点:驱动包版本要和 MySQL 对应,MySQL 8.x 用 8.x 的驱动,5.x 用 5.x 的驱动,混着用会报错。有个粉丝用 MySQL 8 却放了 5.x 的驱动,连了半天没连上,换对版本立马好。
第二步:写 Servlet,查数据库数据
Servlet 是 “后台处理员”,负责从数据库查数据,这步是核心,代码要仔细看。
步骤 1:写数据库连接工具类(复用代码,少重复劳动)
建个
DBUtil.java,把连接数据库的代码封装起来,后面查、增、删数据都能用:java
package com.util; // 记得改自己的包名import java.sql.*;public class DBUtil {// 数据库连接参数(改自己的密码)private static final String URL = "jdbc:mysql://localhost:3306/school?serverTimezone=UTC&useSSL=false";private static final String USER = "root"; // 数据库用户名,默认rootprivate static final String PASSWORD = "123456"; // 改成自己的MySQL密码// 获取数据库连接public static Connection getConnection() {Connection conn = null;try {// 加载驱动(MySQL 8用com.mysql.cj.jdbc.Driver)Class.forName("com.mysql.cj.jdbc.Driver");// 获取连接conn = DriverManager.getConnection(URL, USER, PASSWORD);} catch (ClassNotFoundException e) {System.out.println("驱动没找到:" + e.getMessage());} catch (SQLException e) {System.out.println("连接失败:" + e.getMessage());}return conn;}// 关闭连接(必须关,不然数据库会炸)public static void close(Connection conn, Statement stmt, ResultSet rs) {try {if (rs != null) rs.close();if (stmt != null) stmt.close();if (conn != null) conn.close();} catch (SQLException e) {e.printStackTrace();}}}关键说明:
URL里的serverTimezone=UTC必须加,MySQL 8 以上要时区参数;- 密码改成自己的 MySQL 密码(装 MySQL 时设的那个);
close方法一定要调用,不然多次查询后数据库连接会被占满。
步骤 2:写 Servlet 查学生数据
建个
StudentListServlet.java,调用工具类查数据,传给 JSP:java
package com.servlet; // 自己的包名import java.io.*;import java.sql.*;import java.util.ArrayList;import java.util.List;import javax.servlet.*;import javax.servlet.annotation.WebServlet;import javax.servlet.http.*;import com.util.DBUtil; // 导入工具类// 学生类,存学生信息class Student {private int id;private String name;private int age;private String major;// 下面是getter和setter(自动生成就行)public int getId() { return id; }public void setId(int id) { this.id = id; }public String getName() { return name; }public void setName(String name) { this.name = name; }public int getAge() { return age; }public void setAge(int age) { this.age = age; }public String getMajor() { return major; }public void setMajor(String major) { this.major = major; }}@WebServlet("/StudentListServlet") // 访问路径public class StudentListServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {List<Student> students = new ArrayList<>();Connection conn = null;Statement stmt = null;ResultSet rs = null;try {// 获取数据库连接conn = DBUtil.getConnection();// 查数据stmt = conn.createStatement();rs = stmt.executeQuery("SELECT * FROM student"); // 查所有学生// 把结果存到List里while (rs.next()) {Student s = new Student();s.setId(rs.getInt("id"));s.setName(rs.getString("name"));s.setAge(rs.getInt("age"));s.setMajor(rs.getString("major"));students.add(s);}} catch (SQLException e) {e.printStackTrace();} finally {// 关闭连接(一定要关!)DBUtil.close(conn, stmt, rs);}// 数据传给JSPrequest.setAttribute("students", students);// 转发到student_list.jsp显示request.getRequestDispatcher("student_list.jsp").forward(request, response);}}避坑点:
- 记得导入自己的
DBUtil包,不然会报 “找不到类” 错误; Student类的getter/setter别漏,不然 JSP 里拿不到数据;- SQL 语句别写错表名或字段名(比如把
student写成students),会报 “表不存在” 错。
第三步:写 JSP 页面,显示学生列表
JSP 是 “前台展示员”,把 Servlet 传来的学生数据显示成表格,用户看得懂。
学生列表 JSP(student_list.jsp)代码:
jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ page import="java.util.List" %><%@ page import="com.servlet.Student" %>学生信息列表 学生信息管理系统
学号 姓名 年龄 专业 <%// 从request里拿Servlet传来的数据List students = (List) request.getAttribute("students");if (students != null && !students.isEmpty()) {// 循环显示每个学生for (Student s : students) {%><%= s.getId() %> <%= s.getName() %> <%= s.getAge() %> <%= s.getMajor() %> <%}} else {%>没有学生数据 <% } %>
关键说明:
- 用
<%@ page import %>导入List和Student类,不然识别不了; - 先判断
students是否为空,避免空指针错误; - 循环里用
<%= s.getName() %>输出学生信息,对应Student类的getter方法。
运行案例:看看效果,排查错误
做完上面三步,就能运行看效果了,步骤别错:
运行步骤:
- 启动 MySQL 服务(没启动的话连不上数据库);
- 启动 Tomcat 服务器;
- 浏览器访问
http://localhost:8080/你的项目名/StudentListServlet; - 正常的话会显示学生表格,有张三、李四、王五的信息。
常见错误排查:
- 页面空白 / 没数据:检查 Servlet 里的 SQL 是否正确,数据库里有没有数据;
- ClassNotFoundException:驱动包没放对
WEB-INF/lib,或没 Add to Build Path; - 连接失败:
DBUtil里的密码或 URL 错了,改成自己的 MySQL 信息; - 500 错误:代码有语法错,看 Tomcat 控制台的报错,找对应行号改。
粉丝经历:“我第一次运行时页面空白,查了半天才发现 Servlet 里的
Student类没写getter方法,JSP 拿不到数据,加上后立马显示了,原来这么简单!”个人心得:数据库连接不难,细节是关键
做带数据库的 JSP 项目,最容易栽在细节上 —— 驱动包放错位置、密码没改、连接忘了关,这些小问题看着不起眼,却能让你折腾半天。兔子哥刚开始学的时候,就因为没关数据库连接,刷新几次页面就报错 “连接过多”,后来每次写完代码都检查
close方法,就再没出过这错。其实这个案例学会了,其他带数据库的功能(比如添加、修改学生)都能举一反三,无非是改改 SQL 语句和 Servlet 逻辑。新手别害怕数据库连接,多练几次就熟了,当你在浏览器里看到自己查出来的数据时,那种成就感会让你觉得之前的辛苦都值了。按这个案例一步步做,你会发现 JSP 操作数据库没那么难,加油!
标签: mysql-connector-java-8.0.28.jar ClassNotFoundException
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~