JSP访问MySQL数据库的核心答案是:用JDBC把连接和查询封装成函数,在JSP页面里调用这些函数,就能稳定完成数据库读写。JDBC是Java操作数据库的标准接口,不管你是做毕业设计还是企业内部系统,这条路线都适用,下面直接上代码和步骤。
jsp连接mysql数据库的代码是什么
先把最常用的连接代码写出来,控制器是DbUtil类,内部放两个核心函数:getConnection()负责建立连接,query()负责执行查询。
封装getConnection()函数的两种写法
JSP项目里常见两种驱动:MySQL 5.x和8.x,驱动类名不一样,连接串里的参数也不同。
针对MySQL 8.x
import java.sql.;
public class DbUtil {
private static final String URL = "jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=Asia/Shanghai";
private static final String USER = "root";
private static final String PASSWORD = "123456";
public static Connection getConnection() throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.cj.jdbc.Driver");
return DriverManager.getConnection(URL, USER, PASSWORD);
}
}
针对MySQL 5.x
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123456");
行业共识认为,新项目直接用8.x即可,5.x驱动已经停止维护,连接串里的serverTimezone必须显式指定,否则多数情况下会报时区错误。

实现查询的executeQuery()函数
有了连接,还要封装查询动作,下面这个函数返回ResultSet,调用方遍历结果即可。
public static ResultSet query(String sql) throws ClassNotFoundException, SQLException {
Connection conn = getConnection();
Statement stmt = conn.createStatement();
return stmt.executeQuery(sql);
}
再补一个增删改用的executeUpdate()函数:
public static int executeUpdate(String sql) throws ClassNotFoundException, SQLException {
Connection conn = getConnection();
Statement stmt = conn.createStatement();
return stmt.executeUpdate(sql);
}
这样DbUtil基本够用了,注意这两个函数都抛出了异常,调用时需要在JSP页面里处理。
jsp访问mysql数据库的具体步骤
从零开始操作一个真实项目,按下面顺序走,全程大概10分钟。
jsp连接mysql数据库驱动包怎么放
驱动包是必须的前提条件,从MySQL官网下载mysql-connector-j压缩包,解压后得到mysql-connector-j-8.x.jar,把这个文件复制到项目的WEB-INF/lib目录下。
如果你的项目用Maven,就在pom.xml里加依赖,效果一样:
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.0.33</version>
</dependency>
这一步做不好,后面百分之百会抛ClassNotFoundException,所以先检查jar包在不在。

在JSP页面中调用数据库函数
把DbUtil.java编译后的class文件放到WEB-INF/classes目录下,JSP页面里这样调用:
<%@ page import="java.sql." %>
<%@ page import="com.util.DbUtil" %>
<%
ResultSet rs = null;
try {
rs = DbUtil.query("select from student where age > 18");
while (rs.next()) {
out.println("姓名:" + rs.getString("name") + "<br>");
}
} finally {
if (rs != null) rs.close();
}
%>
这里每次查询都会新建连接,学习阶段没问题,部署到生产环境会慢,因为频繁创建和关闭连接很消耗资源,进一步优化就是引入连接池,但先从函数开始学起。
为什么要把数据库访问封装成函数
很多初学者习惯在JSP脚本片段里直接写Connection、Statement,页面看起来像一团乱麻,封装函数的最大价值是把变化隔离在DbUtil里,页面只要关心业务。
直接在JSP写JDBC的坏处
- 代码重复率高,每个页面都要写一遍
getConnection。 - 一旦数据库密码改了,要打开所有JSP文件逐个修改。
- 业务代码和数据库逻辑混在一起,阅读困难。
- 异常处理和资源关闭最容易遗漏,造成连接泄漏。
函数封装后的调用体验
调用方只看到一行DbUtil.query(...),细节全被隐藏,项目中出现“jsp访问mysql数据库查不到数据”这类问题,排查时只需要看

DbUtil和SQL语句,不用满项目找连接代码。
业内专家指出,把数据库访问封装成独立工具类,是Java Web入门阶段必须养成的习惯,这也是后期切换到MyBatis或Hibernate的基础框架思维。
Q&A:jsp访问mysql数据库常见问题
为什么JSP页面一直报ClassNotFoundException?
最常见原因是驱动jar包没放到WEB-INF/lib,或者放的位置不对,确认jar包能在WEB-INF/lib下看到,同时检查Class.forName里的驱动类名是否和驱动版本匹配,重新部署项目前要重启Tomcat,否则旧类加载器会缓存错误。
query()函数返回null是什么原因?
executeQuery()本身不会返回null,它要么返回ResultSet,要么抛异常,返回null只可能出现在你自己改代码时手动返回了null,检查query方法里是否有return null;语句,然后确认SQL语句是否真的能查到记录。
函数里没有关闭连接,会不会出问题?
会,JSP页面每次请求都调用getConnection(),如果只开不关,数据库连接数会快速占满,后续请求全部卡住,正确的做法是在finally块中关闭ResultSet、Statement、Connection,顺序是后开先关,如果封装了连接池,交给连接池管理即可。
把数据库操作封装成函数,目的是让JSP页面更简洁,同时让连接管理更可控,从getConnection()开始,到query()和executeUpdate()结束,这套组合基本覆盖了日常开发需求。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/537324.html