航班信息管理系统(JDBC)

航班信息管理系统

  • 前言:现在有一家航空公司为了提高用户体验,希望做一个航班信息系统,用户可以根据需求去对航班信息进行操作。组长把这个任务安排给了程序员赵丹,赵丹发现这里需要通过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 
  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
# OOP(机试) 本程序总结文章:http://blog.qiji.tech/?p=10344 - - - ## 程序基本要求 一、项目名称: Air Infomation Programming 基于控制台的航班信息程序,简称AIP 二、具体要求如下: (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类 四、具体要求及推荐实现步骤 1. 创建实体类AirInfo,属性私有化,根据业务提供需要的构造方法和setter/getter方法。 1. 创建航班管理AirInfoManager类,在类中提供列出所有航班的方法,按起飞时间查询的方法、按目的地查询的方法、删除航班的方法、更新航班的方法、退出程序的方法。 2. 创建TestAirInfo类,启动和运行程序。 3. 航班的信息用ArrayList(或数组)保存。 4. 要求代码规范,命名正确。 - - -

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

xmurphymurphy

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

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

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

打赏作者

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

抵扣说明:

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

余额充值