基于JDBC的信息管理系统,那么什么是JDBC呢?什么又是DAO类?

发布于:2025-05-22 ⋅ 阅读:(22) ⋅ 点赞:(0)

1.JDBC

JDBC 即 Java Database Connectivity,是 Java 语言中用于与数据库进行交互的一套 API。它提供了一种标准的方式,让 Java 程序能够连接到各种不同类型的数据库,并执行 SQL 语句来实现对数据库的查询、插入、更新和删除等操作。

主要功能

  • 建立连接:通过加载数据库驱动程序,使用DriverManager类的getConnection方法与数据库建立连接。例如连接 MySQL 数据库,需先加载 MySQL 驱动,再通过指定的 URL、用户名和密码获取连接对象。
  • 执行 SQL 语句:利用StatementPreparedStatement等接口创建 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表,包含idnameage字段,以下是一个简单的UserDAO类示例

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class UserDAO {
    // 数据库连接URL
    private 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类提供了insertUsergetUserById方法,分别用于向数据库中插入用户数据和根据用户 ID 从数据库中查询用户数据。它通过java.sql包中的相关类来实现与数据库的连接、SQL 语句的执行以及结果集的处理。

3.DAO 类和 JDBC联系区别

DAO 类和 JDBC 是 Java 数据访问层中密切相关但又有明确分工的两个概念,以下是它们的联系与区别:

一、联系

  1. DAO 依赖 JDBC 实现数据访问
    DAO 类是数据访问的抽象接口,而 JDBC(Java Database Connectivity)是 Java 访问数据库的具体技术。DAO 类的方法(如增删改查)通常需要通过 JDBC 来执行 SQL 语句,与数据库交互。

  2. 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();
    }
    
  3. 分层设计中的协作关系

    • DAO 层:负责定义数据访问接口,抽象业务需求(如 “获取用户信息”)。
    • JDBC:负责实现这些接口,处理底层数据库操作细节。

二、区别

维度 DAO 类 JDBC
概念本质 设计模式(数据访问对象),属于架构层面的抽象。 技术规范(Java API),属于具体实现工具。
职责 封装业务逻辑对数据的操作需求,提供面向对象的接口(如getUserById())。 提供底层 API(如ConnectionStatement),直接操作数据库。
代码位置 通常位于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 {
    @Override
    public 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 实现物理数据访问。这种分离使得代码更易维护、测试和扩展。


网站公告

今日签到

点亮在社区的每一天
去签到