Java连接数据库是许多应用程序开发中的核心任务,尤其是在需要持久化存储数据的场景中,本文将详细介绍Java如何连接到数据库,涵盖基本原理、常用方法、代码示例及最佳实践,帮助开发者快速掌握这一技能。

数据库连接的基本原理
Java连接数据库主要依赖于JDBC(Java Database Connectivity),这是一种Java API,用于执行SQL语句并处理结果,JDBC提供了一种标准方式,使得Java程序可以与各种数据库进行交互,其基本流程包括:加载驱动、建立连接、创建语句、执行查询、处理结果以及关闭资源,理解这一流程是掌握数据库连接的基础。
加载JDBC驱动
在连接数据库之前,需要先加载相应的JDBC驱动,驱动是数据库厂商提供的实现JDBC接口的类库,负责Java程序与数据库之间的通信,连接MySQL数据库需要加载com.mysql.cj.jdbc.Driver,从Java 6开始,JDBC驱动的加载过程已经可以自动完成,但显式加载仍然是一种良好的实践,代码示例如下:
Class.forName("com.mysql.cj.jdbc.Driver");
建立数据库连接
加载驱动后,下一步是使用DriverManager类建立与数据库的连接,这需要提供数据库的URL、用户名和密码,数据库URL的格式因数据库类型而异,例如MySQL的URL通常为jdbc:mysql://localhost:3306/数据库名,以下是一个建立连接的示例:
String url = "jdbc:mysql://localhost:3306/mydb"; String username = "root"; String password = "password"; Connection connection = DriverManager.getConnection(url, username, password);
创建和执行SQL语句
连接建立后,可以通过Connection对象创建Statement或PreparedStatement对象来执行SQL语句。Statement用于执行静态SQL语句,而PreparedStatement则更适合执行参数化查询,能有效防止SQL注入,以下是一个使用PreparedStatement的示例:

String sql = "SELECT * FROM users WHERE username = ?"; PreparedStatement preparedStatement = connection.prepareStatement(sql); preparedStatement.setString(1, "john_doe"); ResultSet resultSet = preparedStatement.executeQuery();
处理查询结果
执行查询后,结果会以ResultSet对象的形式返回。ResultSet类似于一个游标,可以逐行遍历查询结果,处理结果时,需要检查是否有下一行,并获取各列的值,示例代码如下:
while (resultSet.next()) {
String username = resultSet.getString("username");
int age = resultSet.getInt("age");
System.out.println("Username: " + username + ", Age: " + age);
}
关闭资源
数据库连接是有限资源,使用后必须及时关闭,以避免资源泄漏,通常使用try-with-resources语句可以自动关闭资源,确保代码的健壮性,示例代码如下:
try (Connection connection = DriverManager.getConnection(url, username, password);
PreparedStatement preparedStatement = connection.prepareStatement(sql);
ResultSet resultSet = preparedStatement.executeQuery()) {
// 处理结果
} catch (SQLException e) {
e.printStackTrace();
}
使用连接池优化性能
在高并发场景下,频繁创建和关闭数据库连接会影响性能,连接池(如HikariCP、Apache DBCP)可以复用连接,显著提高应用程序的性能,以下是一个使用HikariCP的示例:
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/mydb");
config.setUsername("root");
config.setPassword("password");
HikariDataSource dataSource = new HikariDataSource(config);
Connection connection = dataSource.getConnection();
常见问题与解决方案
在实际开发中,可能会遇到各种问题,例如连接超时、驱动加载失败等,解决这些问题需要仔细检查配置文件、网络连接以及依赖库的版本,确保数据库服务正在运行,并且用户名和密码正确也是排查问题的关键步骤。

FAQs
Q1: 如何解决“java.sql.SQLException: No suitable driver found”错误?
A1: 这个错误通常是因为JDBC驱动未正确加载或未添加到类路径中,确保已添加数据库驱动的JAR文件,并检查Class.forName()中的驱动类名是否正确。
Q2: 为什么使用连接池比直接连接更高效?
A2: 连接池通过复用连接减少了频繁创建和销毁连接的开销,提高了应用程序的响应速度和吞吐量,特别适合高并发场景。