航班信息管理系统(JDBC)

本文介绍了如何使用Java和JDBC操作MySql数据库来构建一个航班信息管理系统。系统包括创建数据表、数据库工具类、Bean类、DAO类、自定义异常、视图类和主类,实现了显示主菜单、查询、删除和更新航班等功能。

航班信息管理系统

  • 前言:现在有一家航空公司为了提高用户体验,希望做一个航班信息系统,用户可以根据需求去对航班信息进行操作。组长把这个任务安排给了程序员赵丹,赵丹发现这里需要通过Java代码操作数据库,并且用户是可以在控制台做对应的操作,JDBC可以帮她解决这个问题。学习起来,试着把这个系统实现出来。
  • 目标
    • 使用 JDBC 操作 MySql 数据库
  • 需求
    • 显示航班信息系统主菜单
    • 列出所有的航班信息
    • 按起飞时间查询
    • 按目的地查询
    • 删除航班
    • 更新航班
    • 退出系统
  • 提示
    • 创建数据库表 airinfo,添加测试数据不少于 4 条。要求主键自增。
    • 创建实体类 AirInfo,根据业务提供需要的构造方法和 setter/getter方法。
    • 创建 BaseDao 类,实现数据库连接和关闭功能。
    • 创建 DAO 接口 AirInfoDao,定义查询所有航班,按日期和目的地查询航班,删除航班,更新航班的方法。
    • 创建 DAO 实现类 AirInfoDaoImpl,继承 BaseDao 类,实现 AirInfoDao接口,使用 JDBC 完成相应数据库操作。
    • 创建 Main 类,启动和运行系统。

实现

  • 在开始设计前,先介绍一下本项目的大体结构,如下图所示。
    在这里插入图片描述
    • AirInfo:实体类
    • DBUtils:JDBC工具类,实现数据库连接、增删改查和关闭功能,并且在本项目中,新增了Druid数据库连接池。
    • AirInfoDaoImpl:Dao作为接口,Impl作为实现类,定义查询所有航班,按日期、目的地和航班号查询航班,删除航班,更新航班的方法。
    • AirView:视图类
    • db.properties:数据库及连接池的配置信息。
    • OutNumberBoundException:检验用户输入操作是否不符合要求。
    • Main:启动类

1. 创建数据表

在这里插入图片描述

2. 数据库工具类实现

db.properties
driver = com.mysql.cj.jdbc.Driver
url = jdbc:mysql://localhost:3306/AirInfo?serverTimezone=UTC&characterEncoding=utf-8&useSSL=false
username = root
password = 123456
filters = stat
initialSize = 2
maxActive = 300
maxWait = 60000
timeBetweenEvictionRunsMillis = 60000
minEvictableIdleTimeMillis = 300000
validationQuery = SELECT 1
testWhileIdle = true
testOnBorrow = false
testOnReturn = false
poolPreparedStatements = false
maxPoolPreparedStatementPerConnectionSize = 200
DBUtils.java
/**
 * 数据库连接池 + 工具类
 */
public class DBUtils {
   
   
    // 1. 定义变量
    private Connection conn = null;
    private PreparedStatement ps = null;
    private ResultSet rs = null;
    // 定义受影响的行数
    private int count;

    private static String driver;
    private static String url;
    private static String userName;
    private static String passWord;
    private static DruidDataSource druid = new DruidDataSource();


    static {
   
   
        // 2. 加载驱动信息
        ResourceBundle bundle = ResourceBundle.getBundle("db");
        driver = bundle.getString("driver");
        url = bundle.getString("url");
        userName = bundle.getString("username");
        passWord = bundle.getString("password");

        // 使用Druid连接池
        druid.setDriverClassName(driver);
        druid.setUrl(url);
        druid.setUsername(userName);
        druid.setPassword(passWord);

        try {
   
   
            druid.setFilters(bundle.getString("filters"));
            druid.setInitialSize(Integer.parseInt(bundle.getString("initialSize")));
            druid.setMaxActive(Integer.parseInt(bundle.getString("maxActive")));
            druid.setMaxWait(Long.parseLong(bundle.getString("maxWait")));
            druid.setTimeBetweenEvictionRunsMillis(Long.parseLong(bundle.getString("timeBetweenEvictionRunsMillis")));
            druid.setMinEvictableIdleTimeMillis(Long.parseLong(bundle.getString("minEvictableIdleTimeMillis")));
            druid.setValidationQuery(bundle.getString("validationQuery"));
            druid.setTestWhileIdle(Boolean.parseBoolean(bundle.getString("testWhileIdle")));
            druid.setTestOnBorrow(Boolean.parseBoolean(bundle.getString("testOnBorrow")));
            druid.setTestOnReturn(Boolean.parseBoolean(bundle.getString("testOnReturn")));
            druid.setPoolPreparedStatements(Boolean.parseBoolean(bundle.getString("poolPreparedStatements")));
            druid.setMaxPoolPreparedStatementPerConnectionSize(Integer.parseInt(bundle.getString("maxPoolPreparedStatementPerConnectionSize")));
        } catch (SQLException throwables) {
   
   
            throwables.printStackTrace();
        }
    }

    // 3. 建立连接
    protected Connection getConn(){
   
   
        try {
   
   
            // Druid
            conn = druid.getConnection();
        } catch (SQLException throwables) {
   
   
            throwables.printStackTrace();
        }
        return conn;
    }

    // 4. 获得预处理通道
    protected PreparedStatement getPs(String sql){
   
   
        try {
   
   
            ps = getConn().prepareStatement(sql);
        } catch (SQLException throwables) {
   
   
            throwables.printStackTrace();
        }
        return ps;
    }

    // 5. 绑定参数
    protected void param(List list){
   
   
        if (list != null && list.size() > 0){
   
   
            for (int i=0; i<list.size(); i++){
   
   
                try {
   
   
                    ps.setObject(i+1
OOP(机试)[具体要求在压缩文档中给出] 项目名称: Air Infomation System 基于控制台的航班信息系统,简称AIS 具体要求如下: (1)显示航班信息系统主菜单,如图-1所示,包括: 1)列出所有航班 2)按起飞时间查询 3)按目的地查询 4)删除航班 5)更新航班 6)退出系统 (2)列出所有航班:查出所有航班的信息,以列表形式显示,包括:编号,航班号,目的地,起飞日期。 (3)按起飞时间查询:输入起飞时间(格式如2011-2-25),查出所有这一天的航班。 (4)按目的地查询:输入目的地,查出所有飞往此地的航班。 (5)删除航班:删除指定编号的航班。 (6)更新航班:更新指定编号的航班。 (7)退出系统。 三、类的设计 需要定义如下类 航班信息实体类(AirInfo) 航班编号(id) 航班号(flight_number) 目的地(destination) 起飞日期(flight_date) 航班信息管理类AirInfoManager类 程序入口类TestAirInfo类 四、具体要求及推荐实现步骤 6.创建实体类AirInfo,属性私有化,根据业务提供需要的构造方法和setter/getter方法。 7.创建航班管理AirInfoManager类,在类中提供列出所有航班的方法,按起飞时间查询 的方法、按目的地查询的方法、删除航班的方法、更新航班的方法、退出系统的方法。 8.创建TestAirInfo类,启动和运行系统。 9.航班的信息用ArrayList(或数组)保存。 10.要求代码规范,命名正确。
### 使用 Spring Boot 开发航班信息管理系统 #### 创建项目结构 为了构建一个基于 Spring Boot 的航班信息管理系统,首先需要设置项目的初始结构。这可以通过 Spring Initializr 完成,在线工具允许开发者指定依赖项并下载预配置的 Maven 或 Gradle 项目。 ```xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 添加其他必要的依赖 --> </dependencies> ``` #### 配置应用程序属性文件 `application.properties` 文件用于定义数据库连接和其他环境特定参数: ```properties spring.datasource.url=jdbc:mysql://localhost:3306/flightdb?useSSL=false&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=password spring.jpa.hibernate.ddl-auto=update ``` #### 实体类设计 实体类表示持久化对象模型中的表单数据。对于航班信息系统而言,至少应有一个 `Flight` 类来存储航班详情。 ```java package com.example.flightmanagement.model; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity public class Flight { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String flightNumber; private String departureCity; private String arrivalCity; private java.sql.Timestamp departureTime; private java.sql.Timestamp arrivalTime; // Getters and Setters } ``` #### 数据访问层 (DAO) 通过 JPA Repository 接口简化对数据库的操作。这里展示了一个简单的接口声明方式。 ```java package com.example.flightmanagement.repository; import org.springframework.data.jpa.repository.JpaRepository; import com.example.flightmanagement.model.Flight; public interface FlightRepository extends JpaRepository<Flight, Long> {} ``` #### 控制器逻辑编写 控制器负责处理 HTTP 请求并将响应返回给客户端。下面是一个 RESTful API 示例,它提供了基本 CRUD 功能。 ```java package com.example.flightmanagement.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import com.example.flightmanagement.model.Flight; import com.example.flightmanagement.service.FlightService; @RestController @RequestMapping("/flights") public class FlightController { @Autowired private FlightService flightService; @GetMapping("/{id}") public ResponseEntity<?> getFlightById(@PathVariable(value="id") long id){ Optional<Flight> optionalFlight = flightService.findById(id); if (!optionalFlight.isPresent()) { return new ResponseEntity<>(HttpStatus.NOT_FOUND); } return new ResponseEntity<>(optionalFlight.get(), HttpStatus.OK); } @PostMapping("/") public ResponseEntity<Flight> createOrUpdateFlight(@RequestBody Flight flight){ try{ Flight savedFlight = this.flightService.save(flight); return new ResponseEntity<>(savedFlight, HttpStatus.CREATED); }catch(Exception e){ return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR); } } // 更多方法... } ``` #### 启动应用入口点 最后一步是在主程序中启动 Spring Boot 应用程序,类似于提供的图书管理系统的例子[^1]。 ```java package com.example.flightmanagement; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class FlightManagementApplication { public static void main(String[] args) { SpringApplication.run(FlightManagementApplication.class, args); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xmurphymurphy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值