2018.6.6 基于Oracle数据库的航天信息系统JDBC练习

综合练习

一、语言和环境

A、实现语言
	Java
B、环境要求
	JDK 6.0及其以上版本、MyEclipse7.5及其以上版本、Oracle11g、PL/SQL Developer

二、功能要求

开发基于控制台的航班信息系统。具体要求如下:
(1)显示航班信息系统主菜单,包括:
1)列出所有航班
2)按起飞时间查询
3)按目的地查询
4)删除航班
5)更新航班
6)退出系统

(2)列出所有航班:查出所有航班的信息,以列表形式显示,包括:编号,航班号,目的地,起飞日期。如图-2所示。
(3)按起飞时间查询:输入起飞时间(格式如2011-2-25),查出所有这一天的航班。如图-3所示。
(4)按目的地查询:输入目的地,查出所有飞往此地的航班。如图-4所示。
(5)删除航班:删除指定编号的航班。如图-5所示。
(6)更新航班:更新指定编号的航班。如图-6所示。
(7)退出系统。

系统运行界面包括。

主菜单界面
 
列出所有航班界面
 
按起飞时间查询界面
 
按目的地查询界面

删除指定航班界面
 
 更新指定航班界面

三、类的设计

采用DAO模式开发此系统,需要定义如下类
航班信息实体类(AirInfo)
	航班编号(id)
	航班号(flight_number)
	目的地(destination)
	起飞日期(flight_date)
数据库连接和关闭类(BaseDao)
航班信息DAO接口(AirInfoDao)
航班信息DAO实现类(AirInfoDaoImpl)
Main类

四、具体要求及推荐实现步骤

1、创建数据库表airinfo,添加测试数据不少于4条。
2、创建序列airinfoSeq,用于实现airinfo表的主键自增。
3、创建实体类AirInfo,根据业务提供需要的构造方法和setter/getter方法。	
4、创建BaseDao类,实现数据库连接和关闭功能。
5、创建DAO接口AirInfoDao,定义查询所有航班,按日期和目的地查询航班,删除航班,更新航班的方法。
6、创建DAO实现类AirInfoDaoImpl,继承BaseDao类,实现AirInfoDao接口,使用JDBC完成相应数据库操作。 
7、创建Main类,完成在控制台显示留言信息和用户添加留言操作,启动和运行系统。

oracle数据库操作

package com.glut.demo2;
/**
 * 数据库连接和关闭类(BaseDao)
 * @author qichunlin
 *
 */
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class BaseDao {
	//数据库参数包括:  驱动   地址   用户名  密码
	private static final String DRIVER = "oracle.jdbc.driver.OracleDriver";
	private static final String URL = "jdbc:oracle:thin:@localhost:1521:booksales";
	private static final String USER = "bs";
	private static final String PWD = "bs";
	
	//连接数据库
	public static Connection getConn(){
		Connection conn = null;
		try {
			Class.forName(DRIVER);
			conn = DriverManager.getConnection(URL,USER,PWD);
			System.out.println("Connection Successful");
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		
		return conn;
	}
	
	public static void closeConn(ResultSet rs,Statement st,Connection conn){
		try {
			if (rs != null) {
				rs.close();
			}

			if (st != null) {
				st.close();
			}

			if (conn != null) {
				conn.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	/*public static void main(String[] args) {
		BaseDao.getConn();//测试
	}*/
}

对象AirInfo实体类

package com.glut.demo2;

/**
 * 航班信息系统
 * 实体类
 * @author qichunlin
 *
 */
public class AirInfo {
	private int id;
	private int flight_number;
	private String destination;
	private String flight_date;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public int getFlight_number() {
		return flight_number;
	}
	public void setFlight_number(int flight_number) {
		this.flight_number = flight_number;
	}
	public String getDestination() {
		return destination;
	}
	public void setDestination(String destination) {
		this.destination = destination;
	}
	public String getFlight_date() {
		return flight_date;
	}
	public void setFlight_date(String flight_date) {
		this.flight_date = flight_date;
	}
	public AirInfo() {
		super();
		// TODO Auto-generated constructor stub
	}
	public AirInfo(int id, int flight_number, String destination,
			String flight_date) {
		super();
		this.id = id;
		this.flight_number = flight_number;
		this.destination = destination;
		this.flight_date = flight_date;
	}
	
	
	@Override
	public String toString() {
		return "AirInfo [id=" + id + ", flight_number=" + flight_number + ", destination=" + destination
				+ ", flight_date=" + flight_date + "]";
	}
	
	
}

AirInfoDao接口 主要用来对方法的声明

package com.glut.demo2;

import java.util.List;

/**
 * 航班信息DAO接口(AirInfoDao)
 * @author qichunlin
 *
 */
public interface AirInfoDao {
	//定义查询所有航班
	public List<AirInfo> queryAll()throws Exception;
	//按日期查询航班
	public void query1(String time) throws Exception;
	//按目的地查询航班
	public void query2(String destination)throws Exception;
	//通过id删除航班
	public boolean deleteAirInfo(int id)throws Exception;
	//通过id更新航班的方法
	public boolean updateAir(int id,String newDestination,String newDate)throws Exception;
}

d对Dao接口类的声明和具体实现

package com.glut.demo2;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * 实现类
 * @author qichunlin
 *
 */
public class AirInfoDaoImpl implements AirInfoDao {

	// 显示菜单方法
	public void showMenu() throws Exception {
		System.out.println("=====欢迎使用航班信息管理系统=====");
		System.out.println("请选择操作");
		System.out.println("1.列出航班");
		System.out.println("2.按起飞时间查询");
		System.out.println("3.按目的地查询");
		System.out.println("4.删除航班");
		System.out.println("5.更新航班");
		System.out.println("6.退出系统");

		// 输入选择
		Scanner sc = new Scanner(System.in);
		int choose = sc.nextInt();
		switch (choose) {
		case 1:
			queryAll();
			break;
		case 2:
			System.out.println("请输入日期:");
			String time = sc.next();
			query1(time);
			break;
		case 3:
			System.out.println("请输入目的地:");
			String destination = sc.next();
			query2(destination);
			break;
		case 4:
			System.out.println("请输入航班编号:");
			int id = sc.nextInt();
			deleteAirInfo(id);
			break;
		case 5:
			System.out.println("请输入更新的航班编号:");
			int oldId = sc.nextInt();

			System.out.println("请输入新的航班编号:");
			int newId = sc.nextInt();

			System.out.println("请输入新的目的地:");
			String newDestination = sc.next();

			System.out.println("请输入新的起飞日期:");
			String newDate = sc.next();

			updateAir(newId, newDestination, newDate);
			break;
		case 6:
			System.out.println("欢迎下次使用!!");
			System.exit(0);
			break;
		default:
			break;
		}

		System.out.println("是否还要继续?Y/N");
		String c = sc.next();
		switch (c) {
		case "Y":
			showMenu();
			break;
		case "N":
			System.exit(0);
			System.out.println("欢迎下次使用");
			break;

		default:
			break;
		}
	}

	@Override
	public List<AirInfo> queryAll() throws Exception {
		List<AirInfo> listAir = new ArrayList<AirInfo>();
		Connection conn = BaseDao.getConn();
		conn.commit();
		String sql = "select * from airinfo";
		PreparedStatement pstmt = conn.prepareStatement(sql);
		ResultSet rs = pstmt.executeQuery();
		while (rs.next()) {
			AirInfo air = new AirInfo(rs.getInt("id"), rs.getInt("flight_number"), rs.getString("destination"),
					rs.getString("flight_date"));
			listAir.add(air);
		}
		System.out.println("编号" + "	" + "航班号" + "	" + "目的地" + "	" + "起飞日期");

		for (AirInfo air : listAir) {
			System.out.println(air.getId() + "	" + air.getFlight_number() + "	" + air.getDestination() + "	"
					+ air.getFlight_date());
		}
		BaseDao.closeConn(rs, pstmt, conn);
		return listAir;
	}

	@Override
	public void query1(String time) throws Exception {
		Connection conn = BaseDao.getConn();
		String sql = "select * from airinfo where flight_date=to_date(?,'yyyy-mm-dd')";
		PreparedStatement pstmt = conn.prepareStatement(sql);
		pstmt.setString(1, time);
		ResultSet rs = pstmt.executeQuery();
		System.out.println("编号" + "	" + "航班号" + "	" + "目的地" + "	" + "起飞日期");
		while (rs.next()) {
			System.out.println(rs.getInt("id") + "	" + rs.getInt("flight_number") + "	" + rs.getString("destination")
					+ "	" + rs.getString("flight_date"));
		}
		BaseDao.closeConn(rs, pstmt, conn);

	}

	@Override
	public void query2(String destination) throws Exception {
		Connection conn = BaseDao.getConn();
		String sql = "select * from airinfo where destination=?";
		PreparedStatement pstmt = conn.prepareStatement(sql);
		pstmt.setString(1, destination);
		ResultSet rs = pstmt.executeQuery();
		while (rs.next()) {
			System.out.println(rs.getInt("id") + "	" + rs.getInt(" flight_number") + "	" + rs.getString("destination")
					+ "	" + rs.getString("flight_date"));
		}
		BaseDao.closeConn(rs, pstmt, conn);
	}

	@Override
	public boolean deleteAirInfo(int id) throws Exception {
		Connection conn = BaseDao.getConn();
		String sql = "delete from airinfo where id=?";
		PreparedStatement pstmt = conn.prepareStatement(sql);
		pstmt.setInt(1, id);
		int count = pstmt.executeUpdate();
		if (count > 0) {
			System.out.println("删除成功");
		} else {
			System.out.println("删除失败");
		}
		BaseDao.closeConn(null, pstmt, conn);
		return false;
	}

	@Override
	public boolean updateAir(int id, String newDestination, String newDate) throws Exception {
		//AirInfo a = new AirInfo();
		//a.setId(id);

		Connection conn = BaseDao.getConn();
		String sql = "update airinfo set destination=?,flight_date=to_date(?,'yyyy-mm-dd') where id=?";
		PreparedStatement pstmt = conn.prepareStatement(sql);
		pstmt.setString(1, newDestination);
		pstmt.setString(2, newDate);
		pstmt.setInt(3, id);
		int count = pstmt.executeUpdate();
		if (count > 0) {
			System.out.println("更新成功");
		} else {
			System.out.println("更新失败");
		}
		BaseDao.closeConn(null, pstmt, conn);
		return false;
	}

}

测试类 调用菜单的方法

package com.glut.demo2;

/**
 * 测试类
 * @author qichunlin
 *
 */
public class Test {
	public static void main(String[] args) {
		AirInfoDaoImpl ad = new AirInfoDaoImpl();//子类对象指向父类对象
		try {
			ad.showMenu();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

原文地址:https://www.cnblogs.com/qichunlin/p/9136646.html