航班信息管理系统
- 前言:现在有一家航空公司为了提高用户体验,希望做一个航班信息系统,用户可以根据需求去对航班信息进行操作。组长把这个任务安排给了程序员赵丹,赵丹发现这里需要通过Java代码操作数据库,并且用户是可以在控制台做对应的操作,JDBC可以帮她解决这个问题。学习起来,试着把这个系统实现出来。
- 目标:
- 需求:
- 显示航班信息系统主菜单
- 列出所有的航班信息
- 按起飞时间查询
- 按目的地查询
- 删除航班
- 更新航班
- 退出系统
- 提示:
- 创建数据库表 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 {
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 {
ResourceBundle bundle = ResourceBundle.getBundle("db");
driver = bundle.getString("driver");
url = bundle.getString("url");
userName = bundle.getString("username");
passWord = bundle.getString("password");
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();
}
}
protected Connection getConn(){
try {
conn = druid.getConnection();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return conn;
}
protected PreparedStatement getPs(String sql){
try {
ps = getConn().prepareStatement(sql);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return