目录
任务:
做一个航班信息系统,用户 可以根据需求去对航班信息进行操作,通过 java 代码操作数据库,并且用户是可以在控制台做对 应的操作
- 1、创建数据库表 airinfo,添加测试数据不少于 4 条。要求主键自增
- 2、创建实体类 AirInfo,根据业务提供需要的构造方法和 setter/getter
- 方法。
- 3、创建 BaseDao 类,实现数据库连接和关闭功能。
- 4、创建 DAO 接口 AirInfoDao,定义查询所有航班,按日期和目的地查
- 询航班,删除航班,更新航班的方法。
- 5、创建 DAO 实现类 AirInfoDaoImpl,继承 BaseDao 类,实现 AirInfoDao
- 接口,使用 JDBC 完成相应数据库操作。
- 6、创建 Main 类,完成在控制台显示留言信息和用户添加留言操作,启动
代码部分:
主体块:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.Scanner;
public class Demo1{
public static void main(String[] args) throws ParseException {
int num = 0;
AirinfoDaoImpl infoDao = new AirinfoDaoImpl();
do{
//1.输出菜单
System.out.println("-------航班管理系统-------");
System.out.println("1. 查询所有航班信息 2. 根据航班时间进行查询 3. 根据目的地进行查询 4. 删除航班(根据航班编号) 5. 更新航班(根据航班编号) 6. 查询航班是否存在(根据航班编号) 7. 退出系统");
System.out.println("请选择:");
Scanner scanner = new Scanner(System.in);
num = scanner.nextInt();
switch(num){
case 1:
List<Airinfo> infos = infoDao.findAll();
System.out.println("编号\t航班号\t目的地\t起飞时间");
for(int i=0;i<infos.size();i++){
Airinfo airInfo = infos.get(i);
System.out.println((i+1)+"\t"+airInfo.getNumber()+"\t"+airInfo.getAddress()+"\t"+airInfo.getBegintime());
}
break;
case 2:
System.out.println("请输入日期:");
String time = scanner.next();
List<Airinfo> airtime = infoDao.findByTime(time);
System.out.println("编号\t航班号\t目的地\t起飞时间");
for(int i=0;i<airtime.size();i++){
Airinfo airInfo = airtime.get(i);
System.out.println((i+1)+"\t"+airInfo.getNumber()+"\t"+airInfo.getAddress()+"\t"+airInfo.getBegintime());
}
break;
case 3:
System.out.println("请输入目的地:");
String address = scanner.next();
List<Airinfo> airaddress = infoDao.findByAddress(address);
System.out.println("编号\t航班号\t目的地\t起飞时间");
for(int i=0;i<airaddress.size();i++){
Airinfo airInfo = airaddress.get(i);
System.out.println((i+1)+"\t"+airInfo.getNumber()+"\t"+airInfo.getAddress()+"\t"+airInfo.getBegintime());
}
break;
case 4:
System.out.println("请输入需要删除的航班编号:");
String deletenumber = scanner.next();
int delete = infoDao.delete(deletenumber);
System.out.println(delete>0?"删除成功,已删除"+delete+"条数据":"输入的航班编号有误!");
break;
case 5:
System.out.println("请输入需要更新的航班编号:");
String updateNumber = scanner.next();
//验证航班号是否存在
List<Airinfo> ifNumber = infoDao.findByNumber(updateNumber);
if(ifNumber==null){
System.out.println("航班号不存在!");
}else{
System.out.println("请输入新的目的地:");
String newAddress = scanner.next();
System.out.println("请输入新的起飞日期(例:2022-01-01):");
String newBegintime = scanner.next();
Airinfo newAirinfo = new Airinfo();
newAirinfo.setNumber(updateNumber);
newAirinfo.setAddress(newAddress);
int update = infoDao.update(newAirinfo,newBegintime);
System.out.println(update>0?"更新成功,已更新"+update+"条数据":"输入的航班编号有误!");
}
break;
case 6:
System.out.println("请输入航班号:");
String number = scanner.next();
List<Airinfo> airnumber = infoDao.findByNumber(number);
System.out.println("编号\t航班号\t目的地\t起飞时间");
for(int i=0;i<airnumber.size();i++){
Airinfo airInfo = airnumber.get(i);
System.out.println((i+1)+"\t"+airInfo.getNumber()+"\t"+airInfo.getAddress()+"\t"+airInfo.getBegintime());
}
break;
default:
System.out.println("输入错误!请输入1-7间数字");
}
}while(num!=7);
System.out.println("谢谢使用!");
}
}
Airinfo类:
import java.util.Date;
public class Airinfo {
private int airid;
private String number;
private String address;
private Date begintime;
public int getAirid() {
return airid;
}
public void setAirid(int airid) {
this.airid = airid;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Date getBegintime() {
return begintime;
}
public void setBegintime(Date begintime) {
this.begintime = begintime;
}
}
AirinfoDao类:
import java.util.List;
public interface AirinfoDao {
//1. 查询所有航班信息
public List<Airinfo> findAll();
//2. 根据航班时间进行查询
public List<Airinfo> findByTime(String time);
//3. 根据目的地进行查询
public List<Airinfo> findByAddress(String address);
//4. 删除航班(根据航班编号)
public int delete(String number);
//5. 更新航班(根据航班编号)
public int update(Airinfo airinfo,String time);
//6. 查询航班是否存在(根据航班编号)
public List<Airinfo> findByNumber(String number);
}
Druid连接类(固定代码):
import com.alibaba.druid.pool.DruidDataSource;
import java.sql.*;
import java.sql.ResultSet;
import java.util.List;
import java.util.ResourceBundle;
public class DbUtils {
//1.定义需要的工具类对象
private Connection connection=null;
private PreparedStatement pps=null;
protected ResultSet resultSet=null;
private int count=0;//存储受影响的行数
private static String url;
private static String username;
private static String password;
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("user");
password = bundle.getString("password");
datasource.setUsername(username);
datasource.setPassword(password);
datasource.setUrl(url);
datasource.setDriverClassName(driverName);
}
//获取连接对象
public Connection getConnection() {
try {
connection = datasource.getConnection();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return connection;
}
//4.创建通道
protected PreparedStatement getPps(String sql){
try {
getConnection();
//insert into users values(?,?,?,?,)
pps=connection.prepareStatement(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return pps;
}
//5.给占位符赋值 list中保存的是给占位符所赋的值
private void setParams(List list){
try {
if(list!=null&&list.size()>0){
for (int i=0;i<list.size();i++) {
pps.setObject(i+1,list.get(i));
}
}
} catch (SQLException e) {
e.printStackTrace();
}
}
//6.增删改调取的方法
protected int update(String sql,List params){
try {
getPps(sql);
setParams(params);
count = pps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
return count;
}
//7.查询的时候调取一个方法
protected ResultSet query(String sql,List list){
try {
getPps(sql);
setParams(list);
resultSet=pps.executeQuery();
return resultSet;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
//8.关闭资源
protected void closeall(){
try {
if (resultSet != null) {
resultSet.close();
}
if (pps != null) {
pps.close();
}
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
} }
}
db.properties(Druid连接参数):
#连接设置 key不能改
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/JavaTest?serverTimezone=UTC
user=root
password=12345678
AirinfoDaoImpl实现类:
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class AirinfoDaoImpl extends DbUtils implements AirinfoDao {
@Override
public List<Airinfo> findAll(){
ArrayList arrayList = new ArrayList();
try {
String sql = "select * from airinfo";
resultSet = query(sql, null);
while(resultSet.next()){
Airinfo airinfo = new Airinfo();
airinfo.setNumber(resultSet.getString("number"));
airinfo.setAddress(resultSet.getString("address"));
airinfo.setBegintime(resultSet.getDate("begintime"));
arrayList.add(airinfo);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
closeall();
}
return arrayList;
}
@Override
public List<Airinfo> findByTime(String time) {
ArrayList arrayList = new ArrayList();
try {
String sql = "select * from airinfo where begintime = ?";
ArrayList params = new ArrayList();
params.add(time);
resultSet = query(sql, params);
while(resultSet.next()){
Airinfo airinfo = new Airinfo();
airinfo.setNumber(resultSet.getString("number"));
airinfo.setAddress(resultSet.getString("address"));
airinfo.setBegintime(resultSet.getDate("begintime"));
arrayList.add(airinfo);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
closeall();
}
return arrayList;
}
@Override
public List<Airinfo> findByAddress(String address) {
ArrayList arrayList = new ArrayList();
try {
String sql = "select * from airinfo where address like ?";
ArrayList params = new ArrayList();
//添加%%模糊查询地址
params.add("%"+address+"%");
resultSet = query(sql, params);
while(resultSet.next()){
Airinfo airinfo = new Airinfo();
airinfo.setNumber(resultSet.getString("number"));
airinfo.setAddress(resultSet.getString("address"));
airinfo.setBegintime(resultSet.getDate("begintime"));
arrayList.add(airinfo);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
closeall();
}
return arrayList;
}
@Override
public int delete(String number) {
int delete = 0;
try {
String sql = "delete from airinfo where number = ?";
ArrayList params = new ArrayList();
//添加%%模糊查询地址
params.add(number);
delete = update(sql, params);
} catch (Exception e) {
e.printStackTrace();
} finally {
closeall();
}
return delete;
}
@Override
public int update(Airinfo airinfo,String time) {
int update = 0;
try {
String sql = "update airinfo set address = ?, begintime = ? where number = ?";
ArrayList params = new ArrayList();
//添加%%模糊查询地址
params.add(airinfo.getAddress());
params.add(time);
params.add(airinfo.getNumber());
update = update(sql, params);
} catch (Exception e) {
e.printStackTrace();
} finally {
closeall();
}
return update;
}
@Override
public List<Airinfo> findByNumber(String number) {
ArrayList arrayList = new ArrayList();
try {
String sql = "select * from airinfo where number = ?";
ArrayList params = new ArrayList();
params.add(number);
resultSet = query(sql, params);
while(resultSet.next()){
Airinfo airinfo = new Airinfo();
airinfo.setNumber(resultSet.getString("number"));
airinfo.setAddress(resultSet.getString("address"));
airinfo.setBegintime(resultSet.getDate("begintime"));
arrayList.add(airinfo);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
closeall();
}
return arrayList;
}
}
本文档展示了一个基于Java的航班信息管理系统实现,包括创建数据库表、定义实体类、DAO接口及实现,以及在控制台进行航班信息的查询、删除和更新等操作。主要使用了JDBC和Druid连接池进行数据库交互。

181

被折叠的 条评论
为什么被折叠?



