JDBC练习:航班信息管理系统

JDBC练习:航班信息管理系统


1. 练习题

现在有一家航空公司为了提高用户体验,希望做一个航班信息系统,用户可以根据需求去对航班信息进行操

作。组长把这个任务安排给了程序员赵丹,赵丹发现这里需要通过 java 代码操作数据库,并且用户是可以在控制

台做对应的操作,JDBC 可以帮她解决这个问题。学习起来,试着把这个系统实现出来。

  1. 显示航班信息系统主菜单

  2. 列出所有的航班信息

  3. 按起飞时间查询

  4. 按目的地查询

  5. 删除航班

  6. 更新航班

  7. 退出系统

2. 过程描述

1、创建数据库表 airinfo,添加测试数据不少于 4 条。要求主键自增

2、创建实体类 AirInfo,根据业务提供需要的构造方法和 setter/getter 方法。

3、创建 BaseDao 类,实现数据库连接和关闭功能。

4、创建 DAO 接口 AirInfoDao,定义查询所有航班,按日期和目的地查询航班,删除航班,更新航班的方法。

5、创建 DAO 实现类 AirInfoDaoImpl,继承 BaseDao 类,实现 AirInfoDao 接口,使用 JDBC 完成相应数

据库操作。

6、创建 Main 类,完成在控制台显示留言信息和用户添加留言操作,启动和运行系统。

3. 项目结构及代码

3.1 整体代码结构

按照上述过程描述创建如下项目结构和相关文件,并导入数据库相关jar包到lib目录:

在这里插入图片描述

3.2 创建数据库及相关表格

创建air库、airinfo表,表结构如下,id设置为主键并自增:

在这里插入图片描述

暂输入如下四行内容:

在这里插入图片描述

3.3 db.properties

设定数据库驱动、用户名、密码及数据库名称url等:

driver=com.mysql.cj.jdbc.Driver
name=root
pass=12345678
url=jdbc:mysql://localhost:3306/air?serverTimezone=UTC

3.4 代码

  • AirInfo.java

    package bean;
    
    import java.util.Date;
    
    public class AirInfo {
        private int id; //编号
        private String number;  //航班号
        private String destination; //目的地
        private Date date;  //起飞日期
    
        public AirInfo() {
        }
    
        public AirInfo(int id, String number, String destination, Date date) {
            this.id = id;
            this.number = number;
            this.destination = destination;
            this.date = date;
        }
    
        @Override
        public String toString() {
            return id + " " + '\t' + '\t' + number + " " + '\t' + destination + " " + '\t' + '\t' + date;
        }
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getNumber() {
            return number;
        }
    
        public void setNumber(String number) {
            this.number = number;
        }
    
        public String getDestination() {
            return destination;
        }
    
        public void setDestination(String destination) {
            this.destination = destination;
        }
    
        public Date getDate() {
            return date;
        }
    
        public void setDate(Date date) {
            this.date = date;
        }
    }
    
  • AirInfoDao

    package dao;
    
    import bean.AirInfo;
    
    import java.util.List;
    
    public interface AirInfoDao {
        //列出所有航班
        public List<AirInfo> getAll();
    
        //按起飞时间查询
        public List<AirInfo> getByDate(String date);
    
        //按目的地查询
        public List<AirInfo> getByDestination(String destination);
    
        //删除航班
        public int delete(String number);
    
        //更新航班
        public int update(int num, String newDestination, String newDate);
    
    }
    
  • AirInfoDaoImpl

    package dao;
    
    import bean.AirInfo;
    import util.BaseDao;
    
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * 实现类
     */
    public class AirInfoDaoImpl extends BaseDao implements AirInfoDao {
    
        /**
         * 1.列出所有航班
         *
         * @return
         */
        @Override
        public List<AirInfo> getAll() {
            ArrayList arrayList = new ArrayList();
            try {
                String sql = "select * from airinfo";
                ResultSet resultSet = query(sql, null);
                while (resultSet.next()) {
                    AirInfo airInfo = new AirInfo();
                    airInfo.setId(resultSet.getInt("id"));
                    airInfo.setNumber(resultSet.getString("number"));
                    airInfo.setDestination(resultSet.getString("destination"));
                    airInfo.setDate(resultSet.getDate("date"));
                    arrayList.add(airInfo);
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                closeAll();
            }
    
            return arrayList;
        }
    
        /**
         * 2.按起飞时间查询
         *
         * @param date
         * @return
         */
        @Override
        public List<AirInfo> getByDate(String date) {
            ArrayList list = new ArrayList();
            try {
                String sql = "select * from airinfo where date=?";
                ArrayList arrayList = new ArrayList();
                arrayList.add(date);
                ResultSet resultSet = query(sql, arrayList);
                if (resultSet.next() == false) {
                    return null;
                } else {
                    do {
                        AirInfo airInfo = new AirInfo();
                        airInfo.setId(resultSet.getInt("id"));
                        airInfo.setNumber(resultSet.getString("number"));
                        airInfo.setDestination(resultSet.getString("destination"));
                        airInfo.setDate(resultSet.getDate("date"));
                        list.add(airInfo);
                    } while (resultSet.next());
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                closeAll();
            }
    
            return list;
        }
    
        /**
         * 3.按目的地查询
         *
         * @param destination
         * @return
         */
        @Override
        public List<AirInfo> getByDestination(String destination) {
            ArrayList arrayList = new ArrayList();
            try {
                String sql = "select * from airinfo where destination like ?";
                ArrayList list = new ArrayList();
                list.add("%" + destination + "%");
                ResultSet resultSet = query(sql, list);
                if (resultSet.next() == false) {
                    return null;
                } else {
                    do {
                        AirInfo airInfo = new AirInfo();
                        airInfo.setId(resultSet.getInt("id"));
                        airInfo.setNumber(resultSet.getString("number"));
                        airInfo.setDestination(resultSet.getString("destination"));
                        airInfo.setDate(resultSet.getDate("date"));
                        arrayList.add(airInfo);
                    } while (resultSet.next());
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                closeAll();
            }
            return arrayList;
        }
    
        /**
         * 4.删除航班
         *
         * @param number
         * @return
         */
        @Override
        public int delete(String number) {
            int count = -1;
            try {
                String sql = "delete from airinfo where number=?";
                ArrayList list = new ArrayList();
                list.add(number);
                count = update(sql, list);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                closeAll();
            }
            return count;
        }
    
        /**
         * 根据航班号查找航班
         *
         * @param number
         * @return
         */
        public List<AirInfo> getById(String number) {
            ArrayList arrayList = new ArrayList();
            try {
                String sql = "select * from airinfo where number=?";
                ArrayList list = new ArrayList();
                list.add(number);
                ResultSet resultSet = query(sql, list);
                if (resultSet.next() == false) {//查询结果为空
                    return null;
                } else {
                    do {
                        AirInfo airInfo = new AirInfo();
                        airInfo.setId(resultSet.getInt("id"));
                        airInfo.setNumber(resultSet.getString("number"));
                        airInfo.setDestination(resultSet.getString("destination"));
                        airInfo.setDate(resultSet.getDate("date"));
                        arrayList.add(airInfo);
                    } while (resultSet.next());
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                closeAll();
            }
            return arrayList;
        }
    
        /**
         * 5.更新航班
         *
         * @param newDestination 新的地点
         * @param newDate        新的起飞日期
         * @return
         */
        @Override
        public int update(int num, String newDestination, String newDate) {
            int count = -1;
            try {
                String sql = "update airinfo set destination=?,date=? where number=?";
                ArrayList list = new ArrayList();
                list.add(newDestination);
                list.add(newDate);
                list.add(num);
                count = update(sql, list);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                closeAll();
            }
            return count;
        }
    
        /**
         * 根据航班号查找航班
         *
         * @param number
         * @return
         */
        public AirInfo getByNumber(int number) {
            AirInfo airInfo = new AirInfo();
            try {
                String sql = "select * from airinfo where number=?";
                ArrayList list = new ArrayList();
                list.add(number);
                ResultSet resultSet = query(sql, list);
                if (resultSet.next() == false) {//查询结果为空
                    return null;
                } else {
                    airInfo.setId(resultSet.getInt("id"));
                    airInfo.setNumber(resultSet.getString("number"));
                    airInfo.setDestination(resultSet.getString("destination"));
                    airInfo.setDate(resultSet.getDate("date"));
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                closeAll();
            }
            return airInfo;
        }
    }
    
  • Main.java

    package test;
    
    import bean.AirInfo;
    import dao.AirInfoDaoImpl;
    import util.BaseDao;
    import view.AirView;
    
    import java.util.List;
    import java.util.Scanner;
    
    public class Main {
    
        private static BaseDao b = new BaseDao();
        private static AirView v = new AirView();
        private static AirInfoDaoImpl dao = new AirInfoDaoImpl();
        private static Scanner input = new Scanner(System.in);
    
        public static void main(String[] args) {
            v.welcome();
            p:
            while (true) {
                int m = v.menu();
                switch (m) {
                    case 1:
                        //1.列出所有航班
                        check();
                        break;
                    case 2:
                        //2.按起飞时间查询
                        findByAirDate();
                        break;
                    case 3:
                        //3.按目的地查询
                        findByAirDestination();
                        break;
                    case 4:
                        //4.删除航班
                        cut();
                        break;
                    case 5:
                        //5.更新航班
                        modify();
                        break;
                    case 6:
                        //6.离开系统
                        v.bye();
                        break p;
                }
            }
        }
    
        /**
         * 1.列出所有航班
         */
        private static void check() {
            v.printAll(dao.getAll());
    
        }
    
        /**
         * 2.按起飞时间查询
         */
        private static void findByAirDate() {
            String date = v.findByDate();//得到起飞时间
            List<AirInfo> infoList = dao.getByDate(date);
            if (infoList != null) {
                v.printAll(infoList);
            } else {
                v.printNull();
            }
        }
    
        /**
         * 3.按目的地查询
         */
        private static void findByAirDestination() {
            String destination = v.findByDestination();
            List<AirInfo> infoList = dao.getByDestination(destination);
            if (infoList != null) {
                v.printAll(infoList);
            } else {
                v.printNull();
            }
        }
    
        /**
         * 4.删除航班
         */
        private static void cut() {
            String id = v.getId();
            List<AirInfo> airInfo = dao.getById(id);
            if (airInfo != null) {
                v.printAll(airInfo);
                if (v.isDelete() == 1) {
                    dao.delete(id);
                    v.success();
                } else {
                    v.success();
                }
            } else {
                v.printNull();
            }
        }
    
        /**
         * 5.更新航班
         */
        private static void modify() {
            int num = v.getById();
            AirInfo daoById = dao.getByNumber(num);
            if (daoById != null) {
                v.printAirInfo(daoById);
                String newAddress = v.getAddress();
                String newDate = v.getDate();
                dao.update(num, newAddress, newDate);
                v.success();
            } else {
                v.fail();
            }
        }
    
    
    }
    
  • BaseDao

    package util;
    
    import com.alibaba.druid.pool.DruidDataSource;
    
    import java.sql.*;
    import java.util.List;
    import java.util.ResourceBundle;
    
    /**
     * 链接数据库,关闭数据库
     * <p>
     * 工具类
     * (把原来操作数据库的步骤进行独立的封装,方便后期的调用)
     */
    public class BaseDao {
        /**
         * 1.定义变量
         */
        private Connection connection;
        private PreparedStatement pps;
        private ResultSet resultSet;
        private int count;  //存储受影响行数
    
        private static String userName;
        private static String password;
        private static String url;
        private static String driverName;
    
        //德鲁伊
        private static DruidDataSource dataSource = new DruidDataSource();
    
        /**
         *  2.加载驱动
         */
        static {
            ResourceBundle bundle = ResourceBundle.getBundle("db");
            driverName = bundle.getString("driver");
            url = bundle.getString("url");
            userName = bundle.getString("name");
            password = bundle.getString("pass");
    
            dataSource.setUsername(userName);
            dataSource.setPassword(password);
            dataSource.setUrl(url);
            dataSource.setDriverClassName(driverName);
            dataSource.setTestWhileIdle(false);
        }
    
        /**
         * 3.获得链接
         */
        protected Connection getConnection() {//受保护,能被子类调用(防止其他类调用)
            try {
                connection = dataSource.getConnection();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return connection;
        }
    
        /**
         * 4.得到预状态通道
         */
        protected PreparedStatement getPps(String sql) {
            try {
                getConnection();
                pps = getConnection().prepareStatement(sql);
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return pps;
        }
    
        /**
         * 5.绑定参数  (list保存的是给占位符所赋的值)
         */
        protected void param(List list) {
            try {
                if (list != null && list.size() > 0) {  //集合里面要有数据
                    for (int i = 0; i < list.size(); i++) {   //遍历
                        pps.setObject(i + 1, list.get(i));    //赋值 (list.get(i)取出对应数据)
                    }
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 6.执行操作(增删改+查询)
         */
        protected int update(String sql, List list) {
            try {
                getPps(sql);//得到预状态通道
                param(list);//绑定参数
                count = pps.executeUpdate();//得到受影响行数
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return count;
        }
    
        //查询
        protected ResultSet query(String sql, List list) {
            try {
                getPps(sql);//得到预状态通道
                param(list);//绑定参数
                resultSet = pps.executeQuery();
            } catch (SQLException e) {
            }
            return resultSet;
        }
    
        /**
         * 7.关闭资源
         */
        protected void closeAll() {
            try {
                if (connection != null) {
                    connection.close();
                }
                if (pps != null) {
                    pps.close();
                }
                if (resultSet != null) {
                    resultSet.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    
    • AirView

      package view;
      
      import bean.AirInfo;
      import dao.AirInfoDaoImpl;
      
      import java.util.ArrayList;
      import java.util.List;
      import java.util.Scanner;
      
      public class AirView {
          /**
           * 欢迎页面
           */
          public void welcome() {
              System.out.println(" * * * * * * 欢迎使用航班信息管理系统 * * * * * * ");
          }
      
          private List<AirInfo> airInfoList = new ArrayList<>();
          private AirInfoDaoImpl airInfoDao = new AirInfoDaoImpl();
          private Scanner input = new Scanner(System.in);
          private int count = -1;
      
          /**
           * 主方法
           *
           * @return 1.列出所有航班, 2.按起飞时间查询, 3.按目的地查询, 4.删除航班, 5.更新航班6.离开系统
           */
          public int menu() {
              System.out.println("请选择操作:");
              System.out.println("1.列出所有航班,2.按起飞时间查询,3.按目的地查询,4.删除航班,5.更新航班6.离开系统");
              String text = input.next();
              try {
                  count = Integer.parseInt(text);
              } catch (NumberFormatException e) {
              }
              if (count < 1 || count > 6) {
                  System.out.println("亲,请按提示操作! 需要输入操作序号");
                  return menu();
              }
              return count;
          }
      
          /**
           * 1.列出所有航班
           *
           * @param airInfoList
           */
          public void printAll(List<AirInfo> airInfoList) {
              System.out.println("航班信息如下:");
              System.out.println("编号 \t航班号 \t目的地\t\t起飞日期");
              for (AirInfo a : airInfoList) {
                  System.out.println(a.toString());
              }
          }
      
          /**
           * 2.按起飞时间查询
           */
          public String findByDate() {
              System.out.println("请输入起飞时间:(yyyy-MM-dd)");
              String text = input.next();
              return text;
          }
      
          /**
           * 3.按目的地查询
           *
           * @return
           */
          public String findByDestination() {
              System.out.println("请输入目的地:");
              String text = input.next();
              return text;
          }
      
          /**
           * 4.删除航班(根据航班号)
           *
           * @return
           */
          public int isDelete() {
              System.out.println("是否确认删除?");
              System.out.println("1.确认");
              System.out.println("0.取消");
              String text = input.next();
              try {
                  count = Integer.parseInt(text);
              } catch (NumberFormatException e) {
                  e.printStackTrace();
              }
              if (count < 0 || count > 1) {
                  System.out.println("亲,请按提示操作! 需要输入操作序号");
                  return isDelete();
              }
              return count;
          }
      
          /**
           * 得到航班编号
           *
           * @return 航班编号
           */
          public String getId() {
              System.out.println("请输入需要操作的航班号:");
              String id = input.next();
              return id;
          }
      
          /**
           * 5.更新航班
           */
          public int getById() {
              System.out.println("请输入要更新的航班号:");
              String s = input.next();
              count = Integer.parseInt(s);
              return count;
          }
      
          public String getAddress() {
              System.out.println("请输入新的目的地:");
              String s = input.next();
              return s;
          }
      
          public String getDate() {
              System.out.println("请输入新的航班起飞时间:");
              String s = input.next();
              return s;
          }
      
          public void printAirInfo(AirInfo a) {
              System.out.println("航班信息如下:");
              System.out.println("编号 \t航班号 \t目的地\t\t起飞日期");
              System.out.println(a.toString());
          }
      
      
          public void printNull() {
              System.out.println("暂无该航班信息!");
          }
      
          public void success() {
              System.out.println("操作成功!");
          }
      
          public void fail() {
              System.out.println("操作失败!");
          }
      
          public void bye() {
              System.out.println("欢迎下次使用!");
          }
      }
      
    
    

4. 结果

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

昵称系统有问题

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

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

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

打赏作者

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

抵扣说明:

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

余额充值