JSP操作MySQL数据库的核心是使用JDBC驱动,通过加载驱动、建立连接、创建Statement或PreparedStatement、执行SQL、处理结果集和关闭资源这六个步骤完成,整个过程需要依赖mysql-connector-java库,并确保数据库服务可访问。
JSP连接MySQL数据库的步骤
加载驱动和建立连接
在JSP页面中操作MySQL数据库,第一步是加载相应的JDBC驱动,对于MySQL 8.0及以上版本,驱动类名为com.mysql.cj.jdbc.Driver,加载驱动通过Class.forName("com.mysql.cj.jdbc.Driver")实现,随后使用DriverManager.getConnection(url, username, password)获取连接对象。
- URL格式:
jdbc:mysql://localhost:3306/数据库名?useSSL=false&serverTimezone=UTC - 参数说明:
useSSL=false禁用SSL(本地开发常用),serverTimezone=UTC设置时区,避免插入时间时报错。 - 常见错误:
ClassNotFoundException通常表示缺少mysql-connector-java的jar包,需将其放在WEB-INF/lib目录下并重启服务器。
执行SQL语句和处理结果集
获取连接后,通过createStatement()或prepareStatement()创建执行对象,推荐使用PreparedStatement,既能预编译提升性能,又能有效防止SQL注入,执行查询时调用executeQuery(),返回ResultSet对象;执行更新(插入、删除、修改)时调用executeUpdate(),返回受影响的行数。
- 查询示例:
PreparedStatement ps = conn.prepareStatement("SELECT FROM users WHERE id = ?");然后设置参数ps.setInt(1, userId);,最后ResultSet rs = ps.executeQuery();。 - 遍历结果集:
while(rs.next()) { String name = rs.getString("name"); }。 - 资源关闭:在
finally块中依次关闭ResultSet、PreparedStatement、Connection,或者使用JDK 7的try-with-resources自动关闭。
关闭资源与异常处理
数据库连接是有限资源,必须及时关闭,行业共识认为,在finally块中关闭资源是最稳妥的做法,确保即使出现异常也能释放连接,如果使用连接池,调用close()方法实际是将连接归还池中而不是物理关闭。
- 异常处理:捕获
SQLException并打印日志,避免在JSP页面中直接显示错误信息给用户,可以设置统一的错误页面或在Servlet层处理。 - 连接池推荐:对于生产环境,建议使用HikariCP或Druid连接池,配置在
context.xml中,通过JNDI获取数据源,避免每次请求都创建新连接。
JSP操作MySQL数据库的增删改查实例
查询操作示例
以下是一个在JSP页面中查询用户列表的典型代码片段,注意,尽量将数据库操作放在Servlet或JavaBean中,JSP只负责展示,但为了直接演示,我们简化。
<%@ page import="java.sql." %>
<%
String url = "jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC";
String user = "root";
String password = "123456";
try (Connection conn = DriverManager.getConnection(url, user, password);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT id, username FROM users")) {
while (rs.next()) {
out.println(rs.getInt("id") + " - " + rs.getString("username") + "<br>");
}
} catch (SQLException e) {
e.printStackTrace();
}
%>
插入、更新和删除操作
对于增删改,使用executeUpdate()方法,返回的int值表示影响的行数,下面用一个表格对比不同操作的关键代码:
| 操作 | SQL示例 | 注意点 |
|---|---|---|
| 插入 | INSERT INTO users(username, age) VALUES(?, ?) |
设置参数类型与数据库字段类型一致 |
| 更新 | UPDATE users SET age = ? WHERE id = ?
|
注意条件过滤,避免全表更新 |
| 删除 | DELETE FROM users WHERE id = ? |
删除前建议备份或确认条件 |
使用PreparedStatement:以上操作均推荐使用PreparedStatement,例如插入时:
PreparedStatement ps = conn.prepareStatement("INSERT INTO users(username, age) VALUES(?, ?)");
ps.setString(1, "张三");
ps.setInt(2, 25);
int rows = ps.executeUpdate();
如果返回主键,可以调用prepareStatement(sql, Statement.RETURN_GENERATED_KEYS),然后通过ps.getGeneratedKeys()获取。
JSP连接MySQL数据库的常见配置问题
驱动版本匹配
MySQL 8.0之后,JDBC驱动类名和连接URL都有变化,如果你使用旧版驱动(如5.x)连接8.x数据库,会报Unable to load authentication plugin 'caching_sha2_password',此时需要升级驱动到8.x,并在URL中设置allowPublicKeyRetrieval=true,大多数情况下,推荐使用与MySQL版本对应的最新驱动。
连接URL参数
- 时区:
serverTimezone=Asia/Shanghai或GMT%2B8,避免时间差8小时。 - SSL:开发环境用
useSSL=false,生产环境如需加密则配置证书相关参数。 - 字符编码:
characterEncoding=UTF-8,确保中文正常存储。 - 连接超时:
connectTimeout=5000,单位毫秒,防止长时间挂起。
数据库驱动包放置位置
将mysql-connector-java-8.0.33.jar复制到WEB-INF/lib目录下,并确保项目构建路径中也包含该jar,如果使用Maven,在pom.xml中添加依赖,打包时自动包含,如果使用Tomcat,有时需要将jar放在Tomcat的lib目录下供所有应用共享,但推荐每个应用独立配置。
JSP操作MySQL数据库的优化建议
使用连接池
JSP每次请求都创建数据库连接会极大消耗资源,业内专家指出,连接池技术能显著提升性能,常见连接池有HikariCP、Druid、C3P0,在Tomcat中配置数据源后,通过JNDI获取连接,代码更简洁:
Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/myDB");
Connection conn = ds.getConnection();
使用预编译语句
预编译语句不仅防止SQL注入,还能被数据库缓存执行计划,重复使用时效率更高,对于频繁执行的SQL,务必使用PreparedStatement。
分页查询
对于大结果集,不要一次性加载全部数据,使用LIMIT ?, ?实现分页,配合ORDER BY和索引,提升查询速度,在MySQL中,LIMIT offset, count的offset较大时性能下降,可用子查询或id过滤优化。
Q&A:JSP操作MySQL数据库常见问题解答
问题1:jsp连接mysql数据库需要哪些jar包?
需要下载mysql-connector-java的jar包,推荐版本8.0.33或更高,如果使用Maven,添加mysql-connector-java依赖,注意驱动类名是com.mysql.cj.jdbc.Driver,不再是旧版的com.mysql.jdbc.Driver。
问题2:jsp中如何防止SQL注入?
使用PreparedStatement预编译语句,并严格设置参数,避免拼接字符串,例如"SELECT FROM users WHERE name = '" + input + "'"这种写法极易被注入,所有用户输入都应通过参数化方式传递。
问题3:jsp连接mysql数据库报ClassNotFoundException怎么办?
检查jar包是否已正确放置在WEB-INF/lib目录下,并确认项目重新部署,如果使用Eclipse或IntelliJ,可能需要刷新项目或清理Tomcat的work目录,确保Class.forName中的驱动类名拼写正确,MySQL 8.x必须使用com.mysql.cj.jdbc.Driver。
JSP结合MySQL数据库是Java Web开发中最常见的组合之一,掌握JDBC的基本操作后,再配合连接池和框架(如MyBatis、JPA)能大幅提升开发效率,无论学习还是实际项目,从连接、增删改查开始,逐步优化,是稳健的路径。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/540405.html



