Java与SQL数据库的连接是企业级应用开发中的基础能力,通过JDBC(Java Database Connectivity)技术,Java程序可以与各种关系型数据库(如MySQL、Oracle、PostgreSQL等)进行交互,实现数据的增删改查操作,本文将从准备工作、核心步骤、代码实现、常见问题及最佳实践等方面,系统介绍Java如何连接SQL数据库。

准备工作:驱动与环境配置
在Java连接数据库前,需完成两项关键准备工作:下载数据库驱动和配置开发环境。
数据库驱动是Java与数据库通信的桥梁,不同数据库需对应不同的驱动JAR包,MySQL数据库需使用MySQL Connector/J,可从MySQL官网或Maven仓库下载;Oracle数据库则需使用Oracle JDBC驱动,若使用Maven管理项目,可直接在pom.xml中添加依赖,以MySQL为例:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
需确保已安装JDK(建议版本1.8以上)并配置好JAVA_HOME环境变量,同时数据库服务已启动,并获取到连接所需的URL、用户名及密码。
核心步骤:建立数据库连接的完整流程
Java通过JDBC连接数据库的流程可分为五步:加载驱动、获取连接、创建执行对象、执行SQL、处理结果并释放资源。
加载数据库驱动
通过Class.forName()方法加载驱动类,驱动类会在初始化时注册到JDBC管理器中,MySQL 8.x版本的驱动类为com.mysql.cj.jdbc.Driver,旧版本为com.mysql.jdbc.Driver,建议使用新版本以兼容最新特性。

Class.forName("com.mysql.cj.jdbc.Driver");
获取数据库连接
使用DriverManager.getConnection()方法传入数据库URL、用户名和密码,获取Connection对象(代表数据库连接),MySQL的URL格式为:
String url = "jdbc:mysql://localhost:3306/数据库名?useSSL=false&serverTimezone=UTC"; String username = "root"; String password = "密码"; Connection conn = DriverManager.getConnection(url, username, password);
localhost:3306为数据库地址与端口,数据库名为目标数据库,useSSL=false表示禁用SSL(开发环境可配置),serverTimezone=UTC设置时区。
创建执行SQL的对象
Connection对象可创建Statement或PreparedStatement对象用于执行SQL。Statement用于执行静态SQL,但存在SQL注入风险;PreparedStatement支持参数化查询,能有效防止SQL注入,推荐优先使用。
String sql = "SELECT * FROM users WHERE id = ?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setInt(1, 1); // 设置参数(第一个参数为id,值为1)
执行SQL并处理结果
通过executeQuery()(查询)或executeUpdate()(增删改)执行SQL,查询结果通过ResultSet对象遍历,ResultSet类似于一个游标,指向查询结果集的当前行。
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
String name = rs.getString("name");
int age = rs.getInt("age");
System.out.println("Name: " + name + ", Age: " + age);
}
释放资源
为避免资源泄露,需按顺序关闭ResultSet、Statement、Connection对象(建议使用try-with-resources自动关闭)。

if (rs != null) rs.close(); if (pstmt != null) pstmt.close(); if (conn != null) conn.close();
代码示例:以MySQL为例的完整实现
以下是一个完整的Java连接MySQL数据库并查询用户信息的示例:
import java.sql.*;
public class JdbcExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/test_db?useSSL=false&serverTimezone=UTC";
String username = "root";
String password = "123456";
try (Connection conn = DriverManager.getConnection(url, username, password);
PreparedStatement pstmt = conn.prepareStatement("SELECT id, name, age FROM users");
ResultSet rs = pstmt.executeQuery()) {
System.out.println("ID\tName\tAge");
while (rs.next()) {
System.out.println(rs.getInt("1") + "\t" + rs.getString("2") + "\t" + rs.getInt("3"));
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
代码中使用try-with-resources自动关闭资源,避免手动关闭可能导致的遗漏。
常见问题与解决方案
- 驱动加载失败:检查驱动JAR包是否正确导入,或
Class.forName()中的类名是否与数据库版本匹配(如MySQL 8.x需使用com.mysql.cj.jdbc.Driver)。 - 连接超时:检查数据库服务是否启动,IP、端口、数据库名是否正确,或调整连接超时参数(如
url中添加connectTimeout=5000)。 - SQL注入:避免使用
Statement拼接SQL,优先使用PreparedStatement的参数化查询。 - 中文乱码:确保数据库、连接URL、代码编码一致(如MySQL数据库字符集设为
utf8mb4,URL中添加characterEncoding=UTF-8)。
最佳实践:提升连接效率与安全性
- 使用连接池:频繁创建和关闭连接会影响性能,推荐使用连接池(如HikariCP、Druid)管理连接,HikariCP配置示例:
HikariConfig config = new HikariConfig(); config.setJdbcUrl("jdbc:mysql://localhost:3306/test_db"); config.setUsername("root"); config.setPassword("123456"); HikariDataSource ds = new HikariDataSource(config); Connection conn = ds.getConnection(); - 配置合理的连接参数:根据业务需求设置连接池的最大连接数、超时时间等,避免资源耗尽。
- 加密敏感信息:数据库密码等敏感信息不应硬编码在代码中,可通过配置文件或环境变量管理。
通过以上步骤和最佳实践,Java程序可高效、安全地与SQL数据库进行交互,掌握JDBC基础是开发企业级应用的重要技能,后续还可结合ORM框架(如MyBatis、Hibernate)进一步简化数据库操作。












