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()
返回ResultSet
ResultSet 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框架打下坚实基础。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/41062.html