JDBC全称是Java Database Connectivity,是Java平台中用于规范客户端程序如何访问数据库的应用程序接口,它定义了Java应用和数据库管理系统之间的交互标准,让开发者可以用统一的代码操作不同的数据库管理系统。

JDBC和数据库管理系统的核心关系
数据库管理系统(DBMS)是实际负责数据存储、查询、修改、删除等操作的软件,比如MySQL、Oracle、PostgreSQL都属于数据库管理系统。而JDBC本身并不实现具体的数据库操作逻辑,它只提供一套标准的接口,不同数据库厂商会针对自己的数据库管理系统开发对应的JDBC驱动,实现JDBC接口里的方法,这样Java程序只需要面向JDBC接口编程,不需要关心底层具体是哪种数据库管理系统,只要更换对应的驱动就能切换数据库。
JDBC的核心组件
- DriverManager:管理数据库驱动的工厂类,负责注册驱动、建立数据库连接
- Connection:代表和数据库管理系统的连接会话,所有操作都基于这个连接
- Statement/PreparedStatement:用于执行SQL语句的对象,PreparedStatement还能预编译SQL防止注入
- ResultSet:代表SQL查询返回的结果集,封装了从数据库管理系统查询到的数据
使用JDBC操作数据库管理系统的完整流程
1. 加载数据库驱动
不同数据库管理系统的驱动类名不同,比如MySQL的驱动类是com.mysql.cj.jdbc.Driver,Oracle的驱动类是oracle.jdbc.driver.OracleDriver,加载驱动的目的是让DriverManager能识别对应的数据库驱动。
// 加载MySQL数据库驱动,对应MySQL数据库管理系统
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
2. 建立数据库连接
需要通过数据库管理系统的地址、端口、数据库名、用户名、密码来建立连接,格式一般是jdbc:子协议://主机:端口/数据库名,不同数据库管理系统的URL格式略有差异。
// 数据库连接信息,对应本地MySQL数据库管理系统里的test库
String url = "jdbc:mysql://127.0.0.1:3306/test?useSSL=false&serverTimezone=UTC";
String username = "root";
String password = "123456";
Connection connection = null;
try {
// 通过DriverManager获取连接
connection = DriverManager.getConnection(url, username, password);
System.out.println("数据库连接成功");
} catch (SQLException e) {
e.printStackTrace();
}
3. 执行SQL语句操作数据
通过Connection创建Statement或者PreparedStatement对象,执行对应的SQL语句,操作数据库管理系统里的数据。
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
// 查询test库里user表的数据,user表是MySQL数据库管理系统中的一张表
String sql = "SELECT id, username, age FROM user WHERE age > ?";
preparedStatement = connection.prepareStatement(sql);
// 设置SQL参数,查询年龄大于18的用户
preparedStatement.setInt(1, 18);
resultSet = preparedStatement.executeQuery();
// 遍历结果集,输出从数据库管理系统查询到的数据
while (resultSet.next()) {
int id = resultSet.getInt("id");
String name = resultSet.getString("username");
int age = resultSet.getInt("age");
System.out.println("用户ID:" + id + ",用户名:" + name + ",年龄:" + age);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 关闭资源,释放和数据库管理系统的连接
try {
if (resultSet != null) {
resultSet.close();
}
if (preparedStatement != null) {
preparedStatement.close();
}
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
常见问题说明
为什么更换数据库管理系统只需要换驱动和URL?因为JDBC接口是统一的,所有数据库厂商的驱动都实现了这些接口,上层代码调用的都是JDBC标准接口的方法,底层实现由驱动完成,所以切换数据库时不需要修改业务代码。
需要注意的是,如果使用<code>Statement</code>直接拼接SQL字符串,很容易出现SQL注入问题,所以实际开发中更推荐使用<code>PreparedStatement</code>,它会对参数进行转义,避免恶意SQL拼接。
总结
JDBC是Java应用和数据库管理系统之间的桥梁,它屏蔽了不同数据库管理系统的实现差异,让开发者可以用统一的代码操作不同的数据库。理解JDBC的工作流程,能帮助我们更好地处理Java项目中的数据库操作需求,不管是使用MySQL、Oracle还是其他数据库管理系统,核心的JDBC操作逻辑都是一致的。