首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

JDBC 實現寵物信息管理系統:分層架構、連接池、DAO 模式完整源碼

     編輯:MySQL 綜合教學

JDBC 實現寵物信息管理系統:分層架構、DBCP 連接池、DAO 模式完整源碼

本文展示一個基於 JDBC + DBCP 連接池 + DAO 模式的寵物信息管理系統,包含實體類、工具類、DAO 層、測試類、建表腳本、配置文件,適合 Java 初學者理解分層架構與資源管理最佳實踐。

一、項目結構

com.daliu.jdbc
├── PetMessage.java      # 實體類
├── DBUtil.java          # 連接池工具類
├── PetDAO.java          # 數據訪問層
├── PetTest.java         # 測試類
├── db.properties        # 配置文件
└── schema.sql           # 建表腳本

二、核心代碼

1. 實體類 PetMessage

public class PetMessage {
    private int petId;
    private String petSort, petName, petSex, petDate;
    private int petAge;
    // 構造器、getter/setter、toString 省略
}

2. 連接池工具類 DBUtil (DBCP)

public class DBUtil {
    private static BasicDataSource dbcp;
    private static ThreadLocal tl = new ThreadLocal<>();

    static {
        Properties prop = new Properties();
        InputStream is = DBUtil.class.getClassLoader().getResourceAsStream("com/daliu/jdbc/db.properties");
        prop.load(is);
        dbcp = new BasicDataSource();
        dbcp.setDriverClassName(prop.getProperty("jdbc.driver"));
        dbcp.setUrl(prop.getProperty("jdbc.url"));
        dbcp.setUsername(prop.getProperty("jdbc.user"));
        dbcp.setPassword(prop.getProperty("jdbc.password"));
        dbcp.setInitialSize(Integer.parseInt(prop.getProperty("initsize")));
        dbcp.setMaxActive(Integer.parseInt(prop.getProperty("maxactive")));
        dbcp.setMaxWait(Integer.parseInt(prop.getProperty("maxwait")));
        dbcp.setMinIdle(Integer.parseInt(prop.getProperty("minidle")));
        dbcp.setMaxIdle(Integer.parseInt(prop.getProperty("maxidle")));
    }

    public static Connection getConnection() throws SQLException {
        Connection conn = dbcp.getConnection();
        tl.set(conn);
        return conn;
    }

    public static void closeConnection() {
        try {
            Connection conn = tl.get();
            if (conn != null) {
                conn.close();  // 歸還連接池
                tl.remove();
            }
        } catch (Exception e) { throw new RuntimeException(e); }
    }
}

3. DAO 層 PetDAO (增刪改查)

public class PetDAO {
    // 統一模板:獲取連接 → PreparedStatement → 綁參 → 執行 → 釋放
    public static void doAdd(PetMessage pet) { /* INSERT ... */ }
    public static void doDeleteWithId(PetMessage pet) { /* DELETE WHERE petId */ }
    public static void doDeleteWithName(PetMessage pet) { /* DELETE WHERE petName */ }
    public static void doUpdateWithID(PetMessage pet) { /* UPDATE SET petName WHERE petId */ }
    public static void doUpdateWithName(PetMessage pet) { /* UPDATE SET petAge WHERE petName */ }
    public static void doSelectWithId(PetMessage pet) { /* SELECT WHERE petId */ }
    public static void doSelectWithName(PetMessage pet) { /* SELECT WHERE petName */ }
}

4. 測試類 PetTest

public class PetTest {
    public static void main(String[] args) {
        PetMessage pet = new PetMessage(1, "leopard", "小豹子", "female", 5, "2014-12-19");
        PetDAO.doSelectWithId(pet);  // 查詢驗證
    }
}

三、配置文件 db.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/PetSystem
jdbc.user=root
jdbc.password=123456
initsize=1
maxactive=10
maxwait=5000
maxidle=5
minidle=1

四、建表腳本 schema.sql

CREATE DATABASE PetSystem;
USE PetSystem;
CREATE TABLE petMessage (
    petId INT(7) PRIMARY KEY,
    petSort VARCHAR(20),
    petName VARCHAR(20),
    petSex VARCHAR(20),
    petAge INT(4),
    petDate VARCHAR(20)
);

五、關鍵設計點總結

層級職責關鍵技術
Entity數據載體POJO、toString
Util連接池管理DBCP BasicDataSource、ThreadLocal 綁定事務連接
DAOSQL 執行PreparedStatement 防注入、資源 try-catch-finally 關閉
Test功能驗證main 方法調用 DAO

六、生產級升級建議

  • 連接池換 HikariCP(性能更高、配置更簡單)。
  • DAO 引入 模板方法模式 或 Spring JdbcTemplate 消除樣板代碼。
  • 異常統一拋出 DataAccessException,上層統一處理。
  • 事務管理:Connection.setAutoCommit(false) + 服務層控制提交/回滾。
  • SQL 外置到 XML/Mapper 文件,便於維護與審計。

此 Demo 完整演示了「配置 → 連接池 → 實體 → DAO → 測試」的標準化流程,是從 JDBC 原始 API 邁向企業級持久層架構的最小可行性原型。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved