基于JDBC的信息管理系统,那么什么是JDBC呢?什么又是DAO类?
1.JDBC
JDBC 即 Java Database Connectivity,是 Java 语言中用于与数据库进行交互的一套 API。它提供了一种标准的方式,让 Java 程序能够连接到各种不同类型的数据库,并执行 SQL 语句来实现对数据库的查询、插入、更新和删除等操作。
主要功能
- 建立连接:通过加载数据库驱动程序,使用
DriverManager
类的getConnection
方法与数据库建立连接。例如连接 MySQL 数据库,需先加载 MySQL 驱动,再通过指定的 URL、用户名和密码获取连接对象。 - 执行 SQL 语句:利用
Statement
、PreparedStatement
等接口创建 SQL 语句对象,并执行 SQL 语句。Statement
用于执行简单的 SQL 语句,PreparedStatement
能防止 SQL 注入攻击,且性能更好,常用于带参数的 SQL 语句执行。 - 处理结果集:当执行查询语句后,会返回
ResultSet
结果集对象,可通过该对象遍历和获取查询结果的数据。
优势
- 跨数据库平台:由于 JDBC 是 Java 的标准 API,基于 JDBC 开发的程序可以在不同的数据库系统上运行,只需更换相应的数据库驱动即可,具有很高的可移植性。
- 面向对象的操作:JDBC 以面向对象的方式来操作数据库,将数据库连接、SQL 语句执行、结果集处理等操作封装成对象和方法,使代码更易理解和维护。
2.DAO
DAO 是数据访问对象(Data Access Object)的缩写,DAO 类是一种在软件开发中用于封装与数据库交互操作的类。以下是其详细介绍:
作用
- 解耦数据访问层与业务逻辑层:使业务逻辑代码专注于实现业务功能,而不必关注数据库操作的细节,如连接数据库、执行 SQL 语句、处理结果集等。当数据库类型或数据库操作方式发生变化时,只需在 DAO 类中进行修改,而不影响业务逻辑层的代码。
- 提高代码的可维护性和可扩展性:将数据访问相关的代码集中在 DAO 类中,便于对数据库操作进行统一管理和维护。如果需要增加新的数据访问功能或修改现有功能,只需要在相应的 DAO 类中进行修改或添加方法,而不会影响到其他模块的代码。
常见操作方法
- 创建:向数据库中插入新的数据记录。
- 读取:从数据库中查询数据,可以根据不同的条件进行查询,如根据主键查询特定记录、查询符合某些条件的记录集合等。
- 更新:修改数据库中已有的数据记录。
- 删除:从数据库中删除指定的数据记录。
示例
以 Java 语言为例,假设存在一个User
表,包含id
、name
和age
字段,以下是一个简单的UserDAO
类示例
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class UserDAO {// 数据库连接URLprivate static final String URL = "jdbc:mysql://localhost:3306/mydb";// 数据库用户名private static final String USERNAME = "root";// 数据库密码private static final String PASSWORD = "password";// 插入用户public void insertUser(User user) {String sql = "INSERT INTO users (name, age) VALUES (?, ?)";try (Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);PreparedStatement pstmt = conn.prepareStatement(sql)) {pstmt.setString(1, user.getName());pstmt.setInt(2, user.getAge());pstmt.executeUpdate();} catch (SQLException e) {e.printStackTrace();}}// 查询用户public User getUserById(int id) {String sql = "SELECT * FROM users WHERE id = ?";try (Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);PreparedStatement pstmt = conn.prepareStatement(sql)) {pstmt.setInt(1, id);ResultSet rs = pstmt.executeQuery();if (rs.next()) {return new User(rs.getInt("id"), rs.getString("name"), rs.getInt("age"));}} catch (SQLException e) {e.printStackTrace();}return null;}
}
在上述代码中,UserDAO
类提供了insertUser
和getUserById
方法,分别用于向数据库中插入用户数据和根据用户 ID 从数据库中查询用户数据。它通过java.sql
包中的相关类来实现与数据库的连接、SQL 语句的执行以及结果集的处理。
3.DAO 类和 JDBC联系区别
DAO 类和 JDBC 是 Java 数据访问层中密切相关但又有明确分工的两个概念,以下是它们的联系与区别:
一、联系
-
DAO 依赖 JDBC 实现数据访问
DAO 类是数据访问的抽象接口,而 JDBC(Java Database Connectivity)是 Java 访问数据库的具体技术。DAO 类的方法(如增删改查)通常需要通过 JDBC 来执行 SQL 语句,与数据库交互。 -
JDBC 是 DAO 的底层实现手段
DAO 类的实现类中会包含大量 JDBC 代码,如获取数据库连接、创建 Statement 对象、执行 SQL、处理结果集等。例如:java
// DAO实现类中的JDBC代码示例 try (Connection conn = DriverManager.getConnection(url, user, password);PreparedStatement stmt = conn.prepareStatement("SELECT * FROM users WHERE id = ?")) {stmt.setInt(1, userId);ResultSet rs = stmt.executeQuery();// 处理结果集... } catch (SQLException e) {e.printStackTrace(); }
-
分层设计中的协作关系
- DAO 层:负责定义数据访问接口,抽象业务需求(如 “获取用户信息”)。
- JDBC:负责实现这些接口,处理底层数据库操作细节。
二、区别
维度 | DAO 类 | JDBC |
---|---|---|
概念本质 | 设计模式(数据访问对象),属于架构层面的抽象。 | 技术规范(Java API),属于具体实现工具。 |
职责 | 封装业务逻辑对数据的操作需求,提供面向对象的接口(如getUserById() )。 | 提供底层 API(如Connection 、Statement ),直接操作数据库。 |
代码位置 | 通常位于dao 包下,作为接口或抽象类存在(如UserDAO.java )。 | 通常在 DAO 的实现类中(如UserDAOImpl.java ),或封装在工具类中。 |
关注点 | 业务语义(如 “保存用户”),不关心 SQL 语句和数据库类型。 | 技术细节(如 SQL 语法、事务管理、连接池配置)。 |
可移植性 | 与数据库无关,易于切换数据库(如从 MySQL 切换到 Oracle)。 | 依赖具体数据库驱动,SQL 语句可能需要调整(如分页语法)。 |
三、示例对比
1. DAO 接口(抽象业务需求)
public interface UserDAO {User getUserById(int id);void saveUser(User user);
}
2. DAO 实现类(使用 JDBC 实现)
public class UserDAOImpl implements UserDAO {@Overridepublic User getUserById(int id) {// JDBC代码:获取连接、执行查询、封装结果try (Connection conn = JdbcUtils.getConnection();PreparedStatement stmt = conn.prepareStatement("SELECT * FROM users WHERE id = ?")) {stmt.setInt(1, id);ResultSet rs = stmt.executeQuery();if (rs.next()) {return new User(rs.getInt("id"), rs.getString("name"));}} catch (SQLException e) {throw new RuntimeException("数据库查询失败", e);}return null;}
}
3. JDBC 工具类(封装底层操作)
public class JdbcUtils {public static Connection getConnection() throws SQLException {return DriverManager.getConnection(URL, USERNAME, PASSWORD);}// 其他工具方法(关闭资源、事务管理等)
}
四、总结
- DAO 类:是一种设计模式,用于抽象和封装数据访问逻辑,使业务层与数据层解耦。
- JDBC:是 Java 操作数据库的技术,为 DAO 提供具体的数据库访问能力。
两者结合形成了 Java EE 应用中经典的数据访问层架构:上层通过 DAO 接口定义业务操作,下层通过 JDBC 实现物理数据访问。这种分离使得代码更易维护、测试和扩展。