介绍
Java API中的JDBC(Java Database Connectivity)是用于连接和操作关系型数据库的核心工具。开发者通过加载数据库驱动建立与数据库的连接,使用DriverManager.getConnection(url, user, password)获取Connection对象。增删改查操作通过Statement或PreparedStatement实现:插入数据时,构造INSERT语句并调用executeUpdate();查询数据时,执行SELECT语句并通过ResultSet遍历结果集;更新和删除分别使用UPDATE和DELETE语句配合executeUpdate()。预处理语句(PreparedStatement)能有效防止SQL注入,提升安全性。操作完成后需依次关闭ResultSet、Statement及Connection释放资源。JDBC通过统一接口屏蔽底层数据库差异,结合事务控制(commit()/rollback())确保数据一致性,是Java开发中实现数据库交互的基础技术。
准备数据库驱动
导入JDBC驱动包(如MySQL):
<!-- Maven 依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
建立数据库连接
// 加载驱动(JDBC 4.0+ 可自动加载,无需显式调用)
Class.forName("com.mysql.cj.jdbc.Driver");
// 数据库连接信息
String url = "jdbc:mysql://localhost:3306/test_db?useSSL=false&serverTimezone=UTC";
String user = "root";
String password = "123456";
// 获取连接
Connection connection = DriverManager.getConnection(url, user, password);
CRUD 操作示例
插入数据 (Create)
String sql = "INSERT INTO users (name, age) VALUES (?, ?)";
try (PreparedStatement pstmt = connection.prepareStatement(sql)) {
pstmt.setString(1, "张三");
pstmt.setInt(2, 25);
int rows = pstmt.executeUpdate();
System.out.println("插入行数: " + rows);
}
查询数据 (Read)
String sql = "SELECT * FROM users WHERE age > ?";
try (PreparedStatement pstmt = connection.prepareStatement(sql)) {
pstmt.setInt(1, 20);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
int age = rs.getInt("age");
System.out.println(id + ", " + name + ", " + age);
}
}
更新数据 (Update)
String sql = "UPDATE users SET age = ? WHERE name = ?";
try (PreparedStatement pstmt = connection.prepareStatement(sql)) {
pstmt.setInt(1, 30);
pstmt.setString(2, "张三");
int rows = pstmt.executeUpdate();
System.out.println("更新行数: " + rows);
}
删除数据 (Delete)
String sql = "DELETE FROM users WHERE id = ?";
try (PreparedStatement pstmt = connection.prepareStatement(sql)) {
pstmt.setInt(1, 1001);
int rows = pstmt.executeUpdate();
System.out.println("删除行数: " + rows);
}
资源释放
Java JDBC操作后需显式释放Connection、Statement、ResultSet资源,按创建逆序调用close()方法关闭,推荐使用try-with-resources自动管理,防止内存泄漏和数据库连接耗尽,确保系统稳定运行。
- 始终关闭连接和语句对象(使用try-with-resources自动关闭):
try (Connection conn = DriverManager.getConnection(url, user, password);
Statement stmt = conn.createStatement()) {
// 执行操作...
} catch (SQLException e) {
e.printStackTrace();
}
事务管理
Java JDBC事务管理通过Connection对象控制,关闭自动提交(setAutoCommit(false)),执行操作后手动commit()提交或异常时rollback()回滚,确保数据一致性。推荐结合try-catch-finally或try-with-resources实现。
try {
connection.setAutoCommit(false); // 关闭自动提交
// 执行多个更新操作...
// pstmt1.executeUpdate();
// pstmt2.executeUpdate();
connection.commit(); // 提交事务
} catch (SQLException e) {
connection.rollback(); // 回滚事务
} finally {
connection.setAutoCommit(true); // 恢复自动提交
}
注意事项
- 不同数据库驱动类名和URL格式不同(如Oracle:oracle.jdbc.driver.OracleDriver)。
- SQL参数使用?占位符,通过setXxx()方法设置值。
- 确保数据库服务开启,且网络权限开放。
总结
Java API中JDBC是连接和操作数据库的核心技术,其使用流程包括加载驱动、建立连接、执行SQL及关闭资源。首先通过Class.forName()加载数据库驱动(如MySQL的com.mysql.cj.jdbc.Driver),随后通过DriverManager.getConnection()方法传入数据库URL、用户名和密码创建Connection对象。连接成功后,通过createStatement()或prepareStatement()创建Statement或PreparedStatement对象,后者支持预编译SQL语句,能有效防止SQL注入并提升性能。
增删改操作通常使用executeUpdate()方法,接收INSERT、DELETE或UPDATE语句,返回受影响的行数。例如插入数据时,可通过占位符?配合PreparedStatement的setXxx()方法动态赋值。查询操作则通过executeQuery()执行SELECT语句,返回ResultSet结果集,使用next()遍历行并通过getXxx()按列名或索引获取数据。
资源释放是关键,需按ResultSet→Statement→Connection顺序在finally块或try-with-resources中关闭,避免内存泄漏。此外,事务管理可通过setAutoCommit(false)手动提交,执行成功后调用commit(),异常时rollback()回滚。JDBC的灵活性与底层控制能力使其成为Java数据库交互的基石,但也需注意SQL注入防范和连接池优化等实践细节。