JDBC连接数据库的基本概念
JDBC(Java Database Connectivity)是Java语言中用于规范客户端程序如何访问数据库的应用程序接口,它提供了查询和更新数据库中数据的方法,通过JDBC,Java程序可以与各种关系型数据库(如MySQL、Oracle、SQL Server等)进行交互,实现数据的增删改查操作,JDBC的核心思想是通过驱动程序(Driver)建立Java程序与数据库之间的连接,然后通过执行SQL语句来完成数据库操作。

JDBC连接数据库的步骤
加载数据库驱动
在建立数据库连接之前,需要先加载对应数据库的驱动程序,驱动程序是数据库厂商提供的实现JDBC接口的类库,通常以.jar文件的形式存在,MySQL的驱动类名为com.mysql.cj.jdbc.Driver,Oracle的驱动类名为oracle.jdbc.driver.OracleDriver,加载驱动的方法是通过Class.forName()类反射机制,
Class.forName("com.mysql.cj.jdbc.Driver");
建立数据库连接
加载驱动后,需要使用DriverManager类的getConnection()方法建立与数据库的连接,该方法需要三个参数:数据库URL、用户名和密码,数据库URL的格式因数据库而异,例如MySQL的URL格式为jdbc:mysql://localhost:3306/数据库名,其中localhost是数据库服务器地址,3306是默认端口号,数据库名是要连接的数据库,示例代码如下:
String url = "jdbc:mysql://localhost:3306/test"; String username = "root"; String password = "123456"; Connection connection = DriverManager.getConnection(url, username, password);
创建Statement对象
连接建立后,需要通过Connection对象的createStatement()方法创建一个Statement对象,该对象用于执行SQL语句。
Statement statement = connection.createStatement();
执行SQL语句
使用Statement对象的executeQuery()或executeUpdate()方法执行SQL语句。executeQuery()用于执行查询语句,返回一个ResultSet对象;executeUpdate()用于执行更新、插入或删除语句,返回受影响的行数。
String sql = "SELECT * FROM users"; ResultSet resultSet = statement.executeQuery(sql);
处理查询结果
如果是查询操作,需要遍历ResultSet对象来获取查询结果。

while (resultSet.next()) {
String name = resultSet.getString("name");
int age = resultSet.getInt("age");
System.out.println("Name: " + name + ", Age: " + age);
}
关闭资源
操作完成后,需要依次关闭ResultSet、Statement和Connection对象,以释放数据库资源。
resultSet.close(); statement.close(); connection.close();
JDBC连接的最佳实践
使用try-with-resources管理资源
为了避免资源泄漏,建议使用try-with-resources语句自动关闭资源。
try (Connection connection = DriverManager.getConnection(url, username, password);
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(sql)) {
// 处理结果
} catch (SQLException e) {
e.printStackTrace();
}
使用连接池提高性能
频繁创建和关闭数据库连接会影响性能,因此建议使用连接池(如HikariCP、DBCP等)管理数据库连接,连接池可以复用连接,减少资源消耗,使用HikariCP的示例代码如下:
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/test");
config.setUsername("root");
config.setPassword("123456");
HikariDataSource dataSource = new HikariDataSource(config);
try (Connection connection = dataSource.getConnection()) {
// 使用连接
}
使用PreparedStatement防止SQL注入
为了防止SQL注入攻击,建议使用PreparedStatement代替Statement。PreparedStatement可以预编译SQL语句,并对输入参数进行转义。
String sql = "SELECT * FROM users WHERE name = ?";
try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
preparedStatement.setString(1, "John");
ResultSet resultSet = preparedStatement.executeQuery();
// 处理结果
}
常见问题及解决方案
JDBC连接数据库时出现“No suitable driver found”错误
原因:未正确加载数据库驱动或驱动版本不兼容。
解决方案:确保驱动.jar文件已添加到项目中,并使用正确的驱动类名,MySQL 8.0及以上版本应使用com.mysql.cj.jdbc.Driver。

JDBC连接数据库时出现“Access denied for user”错误
原因:数据库用户名或密码错误,或用户没有访问权限。
解决方案:检查用户名和密码是否正确,并确保用户具有访问目标数据库的权限。
相关问答FAQs
Q1: JDBC连接数据库时,URL的格式是什么?
A1: JDBC URL的格式因数据库而异,MySQL的URL格式为jdbc:mysql://主机名:端口号/数据库名,Oracle的URL格式为jdbc:oracle:thin:@主机名:端口号:数据库名,URL中还可以包含参数,如useSSL=false表示禁用SSL连接。
Q2: 如何在Java项目中添加JDBC驱动依赖?
A2: 在Maven项目中,可以在pom.xml文件中添加驱动依赖,添加MySQL驱动的依赖如下:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
在Gradle项目中,可以在build.gradle文件中添加implementation 'mysql:mysql-connector-java:8.0.26'。