Java JDBC编程步骤:加载驱动、建立连接、创建语句对象、执行SQL、处理结果集、关闭资源,使用try-with-resources确保自动释放连接,防止内存泄漏,核心接口:Connection、Statement、ResultSet,需处理SQLException。
Java JDBC编程详解
JDBC(Java Database Connectivity)是Java用于连接和操作数据库的标准API,它提供了一套接口,允许开发者通过统一的SQL语法与不同数据库(如MySQL、Oracle、PostgreSQL等)交互,以下是JDBC的核心步骤和最佳实践,适用于Java 8及以上版本。
JDBC核心步骤
-
加载数据库驱动
使用Class.forName()加载JDBC驱动(Java 6+可省略,但显式声明更可靠):Class.forName("com.mysql.cj.jdbc.Driver"); // MySQL示例 -
建立数据库连接
通过DriverManager.getConnection()获取连接,需指定URL、用户名和密码: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);
-
创建Statement对象
推荐使用PreparedStatement防止SQL注入:String sql = "SELECT * FROM users WHERE id = ?"; PreparedStatement statement = connection.prepareStatement(sql); statement.setInt(1, 101); // 设置参数(索引从1开始)
-
执行SQL语句
- 查询操作:使用
executeQuery()返回ResultSetResultSet resultSet = statement.executeQuery();
- 更新操作:使用
executeUpdate()返回影响行数int rows = statement.executeUpdate();
- 查询操作:使用
-
处理结果集
遍历ResultSet获取数据:while (resultSet.next()) { int id = resultSet.getInt("id"); String name = resultSet.getString("name"); System.out.println("ID: " + id + ", Name: " + name); } -
关闭资源
按ResultSet → Statement → Connection顺序关闭,避免资源泄漏:resultSet.close(); statement.close(); connection.close();
关键注意事项
-
异常处理
用try-catch-finally或try-with-resources(推荐)确保资源关闭:try (Connection conn = DriverManager.getConnection(url, user, pwd); PreparedStatement stmt = conn.prepareStatement(sql)) { // 执行操作 } catch (SQLException e) { e.printStackTrace(); } -
防SQL注入
禁止拼接SQL!必须用PreparedStatement传参:// 错误示例:String sql = "SELECT * FROM users WHERE name='" + inputName + "'"; PreparedStatement stmt = connection.prepareStatement("SELECT * FROM users WHERE name=?"); stmt.setString(1, inputName); // 安全 -
连接池优化
生产环境使用连接池(如HikariCP、Tomcat JDBC)提升性能:HikariConfig config = new HikariConfig(); config.setJdbcUrl(url); config.setUsername(user); config.setPassword(password); try (HikariDataSource dataSource = new HikariDataSource(config); Connection conn = dataSource.getConnection()) { // 操作数据库 }
完整代码示例(MySQL)
import java.sql.*;
public class JdbcDemo {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/test_db";
String user = "root";
String password = "123456";
try (Connection conn = DriverManager.getConnection(url, user, password);
PreparedStatement stmt = conn.prepareStatement("SELECT name, email FROM users WHERE id = ?")) {
stmt.setInt(1, 1001); // 设置查询参数
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
System.out.println("Name: " + rs.getString("name") +
", Email: " + rs.getString("email"));
}
} catch (SQLException e) {
System.err.println("数据库错误: " + e.getMessage());
}
}
}
常见问题解决
- 驱动类找不到:
检查JAR包是否引入(如MySQL添加mysql-connector-java-8.0.30.jar)。 - 时区错误:
URL中添加?serverTimezone=UTC。 - 连接超时:
检查数据库地址、端口、防火墙设置。
进阶建议
- 使用ORM框架:
大型项目推荐MyBatis或Hibernate,简化CRUD操作。 - Spring JDBC模板:
利用JdbcTemplate减少样板代码。 - 事务管理:
通过connection.setAutoCommit(false)和commit()/rollback()控制事务。
引用说明:
- JDBC规范参考Oracle官方文档
- MySQL驱动配置详见MySQL Connector/J文档
- 连接池配置参考HikariCP GitHub
掌握JDBC是Java开发者操作数据库的基石,遵循以上实践可确保代码安全、高效,并为后续学习ORM框架打下坚实基础。
