当前位置:首页 > 后端开发 > 正文

Java如何连接SQL数据库

Java通过JDBC API连接SQL数据库,需加载驱动、建立Connection连接,创建Statement执行SQL语句,处理ResultSet结果集,最后关闭资源确保安全。

Java与SQL数据库的连接是开发企业级应用的核心技术之一,通过JDBC(Java Database Connectivity)API实现,以下是详细步骤和最佳实践,遵循安全、高效原则:

连接前的准备工作

  1. 环境依赖

    • Java开发环境:JDK 8+(Oracle JDK 或 OpenJDK)
    • 数据库:MySQL/Oracle/SQL Server等(以MySQL 8.0为例)
    • 驱动包:下载对应数据库的JDBC驱动(MySQL Connector/J
  2. 项目配置

    Java如何连接SQL数据库 第1张

    • Maven项目添加依赖: <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> </dependency>

连接数据库的6个关键步骤

import java.sql.*; public class JdbcExample { // 数据库配置(实际项目应使用配置管理) private static final String URL = "jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC"; private static final String USER = "root"; private static final String PASSWORD = "securePassword123"; public static void main(String[] args) { Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { // 1. 加载驱动 (JDBC 4.0+ 自动加载,可省略) Class.forName("com.mysql.cj.jdbc.Driver"); // 2. 建立连接 conn = DriverManager.getConnection(URL, USER, PASSWORD); // 3. 创建PreparedStatement(防SQL载入) String sql = "SELECT * FROM users WHERE age > ?"; pstmt = conn.prepareStatement(sql); pstmt.setInt(1, 18); // 参数下标从1开始 // 4. 执行查询 rs = pstmt.executeQuery(); // 5. 处理结果集 while (rs.next()) { System.out.println( "ID: " + rs.getInt("id") + ", Name: " + rs.getString("name") ); } } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } finally { // 6. 关闭连接(必须执行) try { if (rs != null) rs.close(); if (pstmt != null) pstmt.close(); if (conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }

安全与性能最佳实践

  1. 防SQL载入

    • 必须使用PreparedStatement替代Statement
    • 示例错误写法:"SELECT * FROM users WHERE name='" + userInput + "'"
  2. 连接池管理

    Java如何连接SQL数据库 第2张

    • 推荐使用HikariCP或Druid: HikariConfig config = new HikariConfig(); config.setJdbcUrl(URL); config.setUsername(USER); config.setPassword(PASSWORD); HikariDataSource ds = new HikariDataSource(config); Connection conn = ds.getConnection(); // 从连接池获取
    • 资源关闭规范

      • 使用try-with-resources(Java 7+)自动关闭: try (Connection conn = DriverManager.getConnection(URL); PreparedStatement pstmt = conn.prepareStatement(sql)) { // 操作代码 } // 自动调用close()
      • 异常处理

        • 捕获特定异常: catch (SQLException e) { System.err.println("数据库错误: " + e.getErrorCode()); }
        • 常见问题排查

          错误现象 解决方案
          No suitable driver 检查URL格式(jdbc:mysql://)
          Access denied 验证用户名/密码及IP权限
          SSL not enabled URL添加?useSSL=true
          时区错误 添加&serverTimezone=Asia/Shanghai

          关键提示:生产环境必须启用SSL加密连接,避免敏感数据泄露,定期更新JDBC驱动修复安全漏洞。

          扩展应用场景

          1. 事务管理

            conn.setAutoCommit(false); // 关闭自动提交 try { // 执行多个SQL conn.commit(); // 提交事务 } catch (SQLException e) { conn.rollback(); // 回滚 }

          2. 批量处理

            引用说明: 基于Oracle官方JDBC教程[1]、MySQL Connector/J文档[2]及OWASP SQL载入防护指南[3]编写,遵循Java编码安全规范,连接池配置参考HikariCP最佳实践[4]。

            参考资料

            [1] Oracle JDBC Documentation

            [2] MySQL Connector/J Developer Guide

            [3] OWASP SQL Injection Prevention

            [4] HikariCP Configuration

            Java如何连接SQL数据库 第3张

0