# jdbc-demo **Repository Path**: light-touch-technology/jdbc-demo ## Basic Information - **Project Name**: jdbc-demo - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 30 - **Created**: 2025-12-18 - **Last Updated**: 2025-12-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # JDBC示例程序 这是一个使用MySQL8数据库、HikariCP连接池和SQL事务处理的JDBC示例程序,项目模块清晰,便于教学。 ## 项目结构 ``` jdbc-demo/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── jdbc/ │ │ │ ├── config/ # 配置模块 │ │ │ │ └── DatabaseConfig.java │ │ │ ├── model/ # 实体类模块 │ │ │ │ └── User.java │ │ │ ├── dao/ # 数据访问层 │ │ │ │ ├── BaseDAO.java │ │ │ │ └── UserDAO.java │ │ │ ├── service/ # 业务服务层 │ │ │ │ ├── UserService.java │ │ │ │ └── TransactionService.java │ │ │ ├── util/ # 工具类 │ │ │ │ └── ConnectionUtil.java │ │ │ └── demo/ # 示例演示 │ │ │ ├── BasicOperationsDemo.java │ │ │ ├── TransactionDemo.java │ │ │ └── ConnectionPoolDemo.java │ │ └── resources/ │ │ └── db.properties # 数据库配置文件 │ └── test/ │ └── java/ │ └── com/ │ └── example/ │ └── jdbc/ │ └── dao/ # DAO测试 │ └── UserDAOTest.java ├── pom.xml # Maven配置文件 ├── init.sql # 数据库初始化脚本 └── README.md # 项目说明文档 ``` ## 技术栈 - **Java 11**: 编程语言 - **MySQL 8**: 数据库 - **HikariCP**: 数据库连接池 - **JUnit 5**: 单元测试框架 - **SLF4J + Logback**: 日志框架 - **Maven**: 项目构建工具 ## 环境准备 ### 1. 安装MySQL 8 确保本地已安装MySQL 8.0或更高版本,并启动MySQL服务。 ### 2. 创建数据库 执行以下SQL脚本创建数据库和表: ```bash mysql -u root -p < init.sql ``` 或者手动执行以下SQL: ```sql CREATE DATABASE IF NOT EXISTS jdbc_demo CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; USE jdbc_demo; CREATE TABLE IF NOT EXISTS user ( id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '用户ID', name VARCHAR(50) NOT NULL COMMENT '用户名', email VARCHAR(100) NOT NULL UNIQUE COMMENT '邮箱', balance DECIMAL(15, 2) NOT NULL DEFAULT 0.00 COMMENT '账户余额', create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', INDEX idx_name (name) COMMENT '用户名索引', INDEX idx_email (email) COMMENT '邮箱索引' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表'; ``` ### 3. 配置数据库连接 修改`src/main/resources/db.properties`文件,配置数据库连接参数: ```properties # 数据库连接配置 db.driver=com.mysql.cj.jdbc.Driver db.url=jdbc:mysql://localhost:3306/jdbc_demo?useSSL=false&serverTimezone=UTC&characterEncoding=utf-8 db.username=root db.password=your_password # 修改为你的MySQL密码 ``` ## 项目运行 ### 1. 编译项目 ```bash mvn clean compile ``` ### 2. 运行测试 ```bash mvn test ``` ### 3. 运行演示程序 #### 基础操作演示 ```bash mvn exec:java -Dexec.mainClass="com.example.jdbc.demo.BasicOperationsDemo" ``` #### 事务处理演示 ```bash mvn exec:java -Dexec.mainClass="com.example.jdbc.demo.TransactionDemo" ``` #### 连接池演示 ```bash mvn exec:java -Dexec.mainClass="com.example.jdbc.demo.ConnectionPoolDemo" ``` ## 代码模块说明 ### 配置模块 (config) - **DatabaseConfig**: 读取数据库配置信息,包括连接参数和连接池配置 ### 实体类模块 (model) - **User**: 用户实体类,包含用户的基本信息 ### 数据访问层 (dao) - **BaseDAO**: 基础DAO类,提供通用的数据库操作方法 - **UserDAO**: 用户数据访问对象,实现用户相关的数据库操作 ### 业务服务层 (service) - **UserService**: 用户业务服务类,封装用户相关的业务逻辑 - **TransactionService**: 事务服务类,演示事务处理,包括转账功能 ### 工具类 (util) - **ConnectionUtil**: 数据库连接工具类,使用HikariCP管理数据库连接 ### 示例演示 (demo) - **BasicOperationsDemo**: 基础操作演示,展示CRUD操作 - **TransactionDemo**: 事务处理演示,展示事务提交和回滚 - **ConnectionPoolDemo**: 连接池演示,展示HikariCP的使用和性能 ## 学习要点 ### 1. HikariCP连接池 - 高性能的JDBC连接池 - 配置合理的连接池参数 - 监控连接池状态 ### 2. 事务处理 - 手动事务管理 - 事务提交和回滚 - 事务隔离级别 ### 3. DAO模式 - 数据访问与业务逻辑分离 - 通用的数据库操作封装 - 结果集映射 ### 4. 异常处理 - SQLException处理 - 资源释放 - 事务异常回滚 ## 常见问题 ### 1. 数据库连接失败 - 检查MySQL服务是否启动 - 确认数据库用户名和密码正确 - 检查防火墙设置 ### 2. 事务回滚失败 - 确保在异常情况下调用rollback() - 检查事务边界是否正确 - 验证数据库引擎是否支持事务(InnoDB) ### 3. 连接池配置问题 - 根据应用需求调整连接池大小 - 设置合理的连接超时时间 - 监控连接池使用情况 ## 扩展练习 1. 添加更多实体类和对应的DAO 2. 实现更复杂的事务场景 3. 添加数据库连接池监控 4. 实现数据库连接的动态配置 5. 添加数据库操作的日志记录 ## 参考资料 - [HikariCP官方文档](https://github.com/brettwooldridge/HikariCP) - [MySQL Connector/J文档](https://dev.mysql.com/doc/connector-j/8.0/en/) - [JDBC官方教程](https://docs.oracle.com/javase/tutorial/jdbc/)