什么是JDBC
JDBC(Java Database Connectivity)是Java提供的一套用于执行SQL语句的API,它允许Java程序与各种关系型数据库进行交互。不管是MySQL、Oracle还是PostgreSQL,只要数据库支持JDBC驱动,就能用统一的方式去操作数据。
比如你在开发一个小型图书管理系统,想把书名、作者存进数据库里,或者从里面查某本书有没有库存,这时候就需要通过JDBC来建立连接并执行操作。
准备工作:加载驱动和引入依赖
在使用JDBC之前,得先确保项目中包含了对应数据库的驱动包。以MySQL为例,如果你用的是Maven项目,在pom.xml中添加如下依赖:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>如果不是Maven项目,可以直接下载JAR包,加入到项目的类路径中。
连接数据库的基本步骤
连接数据库通常有四个关键步骤:加载驱动、获取连接、执行SQL、关闭资源。下面以MySQL为例演示整个流程。
假设你的数据库名为library,运行在本地3306端口,用户名为root,密码为123456。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBConnection {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/library?useSSL=false&serverTimezone=UTC";
String username = "root";
String password = "123456";
try {
// 加载驱动(新版本可省略)
Class.forName("com.mysql.cj.jdbc.Driver");
// 获取连接
Connection conn = DriverManager.getConnection(url, username, password);
System.out.println("数据库连接成功!");
// 这里可以执行查询、插入等操作
// 记得关闭连接
conn.close();
} catch (ClassNotFoundException e) {
System.err.println("驱动未找到:" + e.getMessage());
} catch (SQLException e) {
System.err.println("数据库连接失败:" + e.getMessage());
}
}
}注意连接字符串中的参数
上面的URL里加了useSSL=false和serverTimezone=UTC,是因为MySQL 8.x默认启用SSL和严格的时区设置。如果不加上这些,可能会报错或连接不上。根据实际情况调整即可。
使用try-with-resources自动管理资源
每次手动close容易遗漏,推荐用try-with-resources语法,让Java自动关闭连接相关的资源。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class SafeQuery {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/library?useSSL=false&serverTimezone=UTC";
String username = "root";
String password = "123456";
String sql = "SELECT * FROM books WHERE id = ?";
try (Connection conn = DriverManager.getConnection(url, username, password);
PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setInt(1, 101); // 设置参数
try (ResultSet rs = pstmt.executeQuery()) {
while (rs.next()) {
System.out.println("书名:" + rs.getString("title"));
System.out.println("作者:" + rs.getString("author"));
}
}
} catch (SQLException e) {
System.err.println("操作失败:" + e.getMessage());
}
}
}这种写法更安全,也更简洁,适合日常开发使用。
常见问题排查
连不上数据库?先检查这几项:
- 数据库服务是否已启动(比如MySQL有没有在运行)
- 网络是否通(远程数据库要注意防火墙和权限)
- 用户名密码是否正确
- 驱动版本是否匹配(例如MySQL 8要用mysql-connector-java 8.x)
- 连接URL格式是否准确
如果提示“Class not found”,说明驱动没加载进来,确认依赖或JAR包是否正确引入。