JDBC基础知识
JDBC(Java Database Connectivity)是Java语言中用于连接和操作数据库的标准API。以下是JDBC的详细解释:
1. JDBC简介
定义:JDBC是Java提供的一套用于执行SQL语句的API,它允许Java应用程序与各种关系型数据库(如MySQL、Oracle、SQL Server等)进行交互。
作用:通过JDBC,Java程序可以连接数据库、执行SQL查询、处理查询结果,以及管理数据库事务。
2. JDBC核心组件
2.1. DriverManager:
负责管理数据库驱动程序,用于建立与数据库的连接。
通过DriverManager.getConnection()方法获取数据库连接。
2.2. Connection:
表示与数据库的会话,用于执行SQL语句和管理事务。
通过Connection对象可以创建Statement、PreparedStatement或CallableStatement对象。
2.3. Statement:
用于执行静态SQL语句(如SELECT、INSERT、UPDATE、DELETE等)。
适用于简单查询,但容易受到SQL注入攻击。
2.4. PreparedStatement:
预编译SQL语句,提高执行效率并防止SQL注入。
通过?占位符传递参数,更安全且高效。
2.5. CallableStatement:
用于调用数据库存储过程或函数。
支持输入参数、输出参数和返回值。
2.6. ResultSet:
表示SQL查询的结果集,用于遍历和处理查询结果。
通过ResultSet对象可以获取查询结果中的每一行数据。
3. JDBC工作流程
3.1. 加载驱动:
Class.forName("com.mysql.cj.jdbc.Driver");
3.2. 建立连接:
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "username", "password");
3.3. 创建Statement:
Statement stmt = conn.createStatement();
// 或使用PreparedStatement
PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM users WHERE id = ?");
pstmt.setInt(1, 1);
3.4. 执行SQL:
ResultSet rs = stmt.executeQuery("SELECT * FROM users");
// 或使用PreparedStatement
ResultSet rs = pstmt.executeQuery();
3.5. 处理结果:
while (rs.next()) {
String name = rs.getString("name");
System.out.println(name);
}
3.6. 关闭资源:
rs.close();
stmt.close();
conn.close();
4. JDBC的优势
- 跨数据库兼容:JDBC支持多种数据库,只需更换驱动即可切换数据库。
- 安全性:通过PreparedStatement防止SQL注入攻击。
- 性能:预编译SQL语句提高执行效率。
- 事务管理:支持数据库事务的提交、回滚和保存点。
5. JDBC的局限性
- 代码冗余:需要手动管理连接、Statement和ResultSet的关闭。
- 资源泄漏风险:如果未正确关闭资源,可能导致内存泄漏。
- 复杂查询支持有限:对于复杂查询,JDBC不如ORM框架(如Hibernate、MyBatis)方便。
6. 实际应用场景
- Web应用:连接数据库存储用户信息、订单数据等。
- 企业应用:处理业务逻辑和数据库交互。
- 数据分析:执行复杂查询和数据处理。