在JSP中获取数据库信息是Web开发中的常见需求,通常通过JDBC(Java Database Connectivity)技术实现,以下是详细的步骤和代码示例,帮助理解如何在JSP页面中连接数据库并查询数据。
准备工作
确保项目中已添加数据库驱动的JAR包(如MySQL的mysql-connector-java.jar),并将其放置在WEB-INF/lib目录下,确保数据库服务已启动,并拥有正确的连接信息(URL、用户名、密码)。
创建数据库连接工具类
为了代码复用,建议创建一个数据库连接工具类(如DBUtil.java),负责获取和关闭连接,示例代码如下:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBUtil {
private static final String URL = "jdbc:mysql://localhost:3306/数据库名?useSSL=false";
private static final String USER = "用户名";
private static final String PASSWORD = "密码";
static {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(URL, USER, PASSWORD);
}
public static void closeConnection(Connection conn) {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
在JSP中查询数据库数据
在JSP页面中,通过<% %>脚本片段编写Java代码,实现数据库连接、查询和结果展示,以下是完整示例:
<%@ page import="java.sql.*" %>
<%@ page import="com.example.DBUtil" %>
<%
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 1. 获取数据库连接
conn = DBUtil.getConnection();
stmt = conn.createStatement();
String sql = "SELECT id, name, age FROM users";
rs = stmt.executeQuery(sql);
// 2. 遍历结果集并展示
out.println("<table border='1'>");
out.println("<tr><th>ID</th><th>Name</th><th>Age</th></tr>");
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
int age = rs.getInt("age");
out.println("<tr>");
out.println("<td>" + id + "</td>");
out.println("<td>" + name + "</td>");
out.println("<td>" + age + "</td>");
out.println("</tr>");
}
out.println("</table>");
} catch (SQLException e) {
e.printStackTrace();
out.println("数据库查询出错:" + e.getMessage());
} finally {
// 3. 关闭资源
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (conn != null) DBUtil.closeConnection(conn);
}
%>
使用JSTL和EL优化代码
直接在JSP中编写Java代码不利于维护,推荐使用JSTL(JSP Standard Tag Library)和EL表达式简化代码,首先引入JSTL核心库:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
然后修改后的代码如下:
<%@ page import="java.sql.*" %>
<%@ page import="com.example.DBUtil" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<sql:setDataSource var="db" driver="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost:3306/数据库名?useSSL=false"
user="用户名" password="密码"/>
<sql:query dataSource="${db}" var="result">
SELECT id, name, age FROM users
</sql:query>
<table border="1">
<tr>
<th>ID</th>
<th>Name</th>
<th>Age</th>
</tr>
<c:forEach var="row" items="${result.rows}">
<tr>
<td>${row.id}</td>
<td>${row.name}</td>
<td>${row.age}</td>
</tr>
</c:forEach>
</table>
注意事项
- 安全性:避免在JSP中硬编码数据库连接信息,建议使用
context.xml配置数据源。 - 性能:频繁创建和关闭连接会影响性能,使用连接池(如HikariCP)优化。
- 异常处理:确保所有数据库资源(Connection、Statement、ResultSet)在
finally块中关闭,防止资源泄漏。
相关问答FAQs
Q1: JSP中直接操作数据库的缺点是什么?如何改进?
A1: 直接在JSP中编写数据库操作代码会导致页面逻辑混乱、难以维护,且存在安全风险(如SQL注入),改进方法包括:使用MVC模式分离业务逻辑和视图层,通过Servlet或DAO(Data Access Object)处理数据库操作,JSP仅负责展示数据。

Q2: 如何解决JSP连接数据库时的中文乱码问题?
A2: 中文乱码通常由字符编码不一致导致,解决方案包括:
- 在数据库连接URL中指定字符集,如
?useUnicode=true&characterEncoding=UTF-8。 - 确保JSP页面编码为UTF-8(
<%@ page contentType="text/html; charset=UTF-8" %>)。 - 对数据库操作涉及的字符串使用
setCharacterEncoding()方法处理。
来源互联网整合,作者:小编,如若转载,请注明出处:https://www.aiboce.com/ask/246735.html