FranklinPradeep/EMERGENCY-RESPONSE-USING-JDBC
GitHub: FranklinPradeep/EMERGENCY-RESPONSE-USING-JDBC
一个基于 Java JDBC 和 MySQL 的控制台应急响应数据库管理系统,用于演示 CRUD 操作与团队调度。
Stars: 0 | Forks: 0
# 紧急响应数据库 — Java JDBC 项目
## 项目描述
一个基于控制台(Console)的 Java 应用程序,使用 **Java JDBC** 和 **MySQL** 管理紧急事件、响应团队和调度分配。该项目为一个大学数据库 / Java 编程课程而构建,用于演示真实的 CRUD 操作、关系型数据库设计以及面向对象编程。
## 技术栈
| 技术 | 用途 |
|---|---|
| Java 8+ | 应用程序逻辑 |
| JDBC | 数据库连接 |
| MySQL 8+ | 关系型数据库 |
| PreparedStatement | 安全参数化查询 |
| Scanner | 控制台用户输入 |
## 文件夹结构
```
JDBC project/
├── src/
│ └── emergency/
│ ├── DBConnection.java ← JDBC connection manager
│ ├── Incident.java ← Incident model
│ ├── ResponseTeam.java ← ResponseTeam model
│ ├── IncidentDAO.java ← Incident CRUD operations
│ ├── TeamDAO.java ← Team & dispatch operations
│ └── Main.java ← Menu-driven entry point
├── sql/
│ └── setup.sql ← Database + table creation + sample data
├── lib/
│ └── mysql-connector-j.jar ← Place MySQL JDBC driver here
└── README.md
```
## 分步设置与运行说明
### 步骤 1 — 安装前置条件
- Java JDK 8 或更高版本:https://adoptium.net
- MySQL 8+:https://dev.mysql.com/downloads/mysql/
- MySQL JDBC 驱动(Connector/J):https://dev.mysql.com/downloads/connector/j/
### 步骤 2 — 设置数据库
1. 打开 MySQL Workbench 或 MySQL 命令行客户端。
2. 运行 SQL 脚本:
SOURCE /path/to/JDBC project/sql/setup.sql;
或直接将 `setup.sql` 的内容粘贴到 MySQL Workbench 并执行。
### 步骤 3 — 添加 JDBC 驱动
下载 `mysql-connector-j-x.x.x.jar` 并将其放入 `lib/` 文件夹。
### 步骤 4 — 配置数据库连接
打开 `src/emergency/DBConnection.java` 并更新:
```
private static final String USER = "root"; // your MySQL username
private static final String PASSWORD = "password"; // your MySQL password
```
### 步骤 5 — 编译项目
在项目根目录下执行:
```
javac -cp "lib/mysql-connector-j.jar" -d out src/emergency/*.java
```
### 步骤 6 — 运行应用程序
```
java -cp "out:lib/mysql-connector-j.jar" emergency.Main
```
## 示例程序输出
```
╔══════════════════════════════════════════╗
║ EMERGENCY RESPONSE DATABASE SYSTEM ║
╚══════════════════════════════════════════╝
------------------------------------------
1. Add Emergency Incident
2. View All Incidents
3. Search Incident by ID
4. Update Incident Details
5. Delete Incident
6. Add Response Team
7. Assign Team to Incident
8. View Assigned Teams
9. Exit
------------------------------------------
Enter choice: 2
[DB] Connected to emergency_response_db.
+-------+------------------------+------------+----------------------+------------+
| ID | Location | Type | Date & Time | Severity |
+-------+------------------------+------------+----------------------+------------+
| 1 | 123 Main St | Fire | 2024-01-15 08:30:00 | High |
| 2 | 456 Oak Ave | Medical | 2024-01-16 14:15:00 | Critical |
| 3 | 789 Pine Rd | Police | 2024-01-17 22:45:00 | Medium |
+-------+------------------------+------------+----------------------+------------+
```
## 错误处理示例
| 场景 | 显示的消息 |
|---|---|
| 重复事件 ID | `✘ Incident ID already exists. Choose a different ID.` |
| 调度时无效的事件/团队 ID | `✘ Invalid Incident ID or Team ID. Please verify both exist.` |
| 非数字菜单输入 | `Please enter a valid number.` |
| 日期格式错误 | `Invalid format. Example: 2024-06-15 14:30:00` |
| 数据库连接失败 | 包含原因的 `SQLException` 消息 |
## 本项目中 JDBC 的工作原理
```
Java App → DriverManager.getConnection() → MySQL Server
↓
Connection object
↓
PreparedStatement → SQL query with ? placeholders
↓
executeUpdate() / executeQuery()
↓
ResultSet → Java objects (Incident / ResponseTeam)
↓
Display to console
```
1. `DBConnection.getConnection()` 加载 MySQL 驱动并建立到数据库服务器的 TCP 连接。
2. 每个 DAO 方法创建一个带有 `?` 占位符的 `PreparedStatement` —— 值通过 `setInt()` / `setString()` 绑定,防止 SQL 注入。
3. 对 INSERT / UPDATE / DELETE 使用 `executeUpdate()`;对 SELECT 使用 `executeQuery()` 返回 `ResultSet`。
4. 使用 try-with-resources(`try (... ps = ...) {}`)自动关闭语句,即使发生异常也是如此。
## 后续增强功能
- 添加带有登录/认证的 `users` 表
- 生成事件报告为 PDF 或 CSV 导出
- 添加 JavaFX 或 Swing GUI 前端
- 实现事件状态跟踪(开启 / 进行中 / 已解决)
- 添加调度分配的时间戳
- 使用 Spring Boot 实现 REST API 层
## 简要项目描述(用于提交)
标签:CRUD, DBConnection, Incident, Java 8, JDBC, PreparedStatement, ResponseTeam, Scanner, SQL脚本, TeamDAO, 关系型数据库, 后端开发, 对象建模, 库, 应急响应, 应急管理, 控制台应用, 数据库, 数据库设计, 课程设计, 项目实战