DriverManager
获取Connection
对象建立连接,利用Statement
或PreparedStatement
执行SQL语句,处理结果集后关闭连接释放资源。在JSP中连接SQL数据库需要遵循标准JDBC流程,以下是详细步骤和注意事项:
准备工作
-
安装数据库
选择MySQL/SQL Server等数据库,下载安装并创建数据库(示例数据库名:test_db
,表名:users
)。 -
下载JDBC驱动
- MySQL:下载mysql-connector-java.jar
- SQL Server:下载mssql-jdbc.jar
将JAR文件放入项目的/WEB-INF/lib
目录。
连接数据库的4个核心步骤
步骤1:加载数据库驱动
<%@ page import="java.sql.*" %> <% try { Class.forName("com.mysql.cj.jdbc.Driver"); // MySQL // Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); // SQL Server } catch (ClassNotFoundException e) { out.println("驱动加载失败: " + e.getMessage()); } %>
步骤2:建立数据库连接
<% String url = "jdbc:mysql://localhost:3306/test_db?useSSL=false&serverTimezone=UTC"; // MySQL // String url = "jdbc:sqlserver://localhost:1433;databaseName=test_db"; // SQL Server String user = "root"; String password = "your_password"; Connection conn = null; try { conn = DriverManager.getConnection(url, user, password); out.println("数据库连接成功!"); } catch (SQLException e) { out.println("连接失败: " + e.getMessage()); } %>
步骤3:执行SQL查询
<% Statement stmt = null; ResultSet rs = null; try { stmt = conn.createStatement(); String sql = "SELECT * FROM users"; rs = stmt.executeQuery(sql); while (rs.next()) { out.println("<br>ID: " + rs.getInt("id") + ", 姓名: " + rs.getString("name")); } } catch (SQLException e) { out.println("查询错误: " + e.getMessage()); } %>
步骤4:关闭连接(关键!)
<% try { if (rs != null) rs.close(); if (stmt != null) stmt.close(); if (conn != null) conn.close(); // 释放资源 } catch (SQLException e) { out.println("关闭连接时出错: " + e.getMessage()); } %>
完整示例代码
<%@ page language="java" contentType="text/html; charset=UTF-8" %> <%@ page import="java.sql.*" %> <!DOCTYPE html> <html> <head>JSP数据库连接示例</title> </head> <body> <% Connection conn = null; Statement stmt = null; ResultSet rs = null; try { // 1. 加载驱动 Class.forName("com.mysql.cj.jdbc.Driver"); // 2. 建立连接 String url = "jdbc:mysql://localhost:3306/test_db?useSSL=false&serverTimezone=UTC"; conn = DriverManager.getConnection(url, "root", "123456"); // 3. 执行查询 stmt = conn.createStatement(); rs = stmt.executeQuery("SELECT id, name, email FROM users"); while (rs.next()) { out.println("<p>用户: " + rs.getString("name") + " | Email: " + rs.getString("email") + "</p>"); } } catch (Exception e) { out.println("<p style='color:red'>错误: " + e.getMessage() + "</p>"); } finally { // 4. 关闭连接 try { if (rs != null) rs.close(); } catch (SQLException e) { e.printStackTrace(); } try { if (stmt != null) stmt.close(); } catch (SQLException e) { e.printStackTrace(); } try { if (conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } } %> </body> </html>
常见问题解决
-
驱动加载失败
- 检查JAR文件是否在
/WEB-INF/lib
目录 - 重启Tomcat服务器
- 检查JAR文件是否在
-
连接拒绝(Access Denied)
- 检查数据库用户名/密码
- 确认数据库允许远程连接(如需要)
-
时区错误(MySQL)
在连接URL中添加:?serverTimezone=Asia/Shanghai
安全建议
- 使用连接池
避免频繁创建连接(推荐Tomcat JDBC Pool或Druid)。 - 防SQL注入
使用PreparedStatement
替代Statement
:String sql = "SELECT * FROM users WHERE id=?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setInt(1, userId); // 安全设置参数
- 敏感信息保护
不要将数据库密码硬编码在JSP中,使用配置文件或环境变量。
JSP连接数据库的核心是JDBC四步流程:加载驱动→建立连接→执行SQL→释放资源,务必注意资源关闭和异常处理,生产环境应使用连接池和预编译语句提升性能及安全性。
引用说明:
- MySQL官方JDBC文档:https://dev.mysql.com/doc/connector-j/
- Microsoft JDBC驱动指南:https://docs.microsoft.com/zh-cn/sql/connect/jdbc/
- Oracle JDBC教程:https://docs.oracle.com/javase/tutorial/jdbc/
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/46448.html