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("编号" + "\t" + "航班号" + "\t" + "目的地" + "\t" + "起飞日期");
for (AirInfo air : listAir) {
System.out.println(air.getId() + "\t" + air.getFlight_number() + "\t" + air.getDestination() + "\t"
+ 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("编号" + "\t" + "航班号" + "\t" + "目的地" + "\t" + "起飞日期");
while (rs.next()) {
System.out.println(rs.getInt("id") + "\t" + rs.getInt("flight_number") + "\t" + rs.getString("destination")
+ "\t" + 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") + "\t" + rs.getInt(" flight_number") + "\t" + rs.getString("destination")
+ "\t" + 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();
}
}
}
2018.6.6 基于Oracle数据库的航天信息系统JDBC练习的更多相关文章
- 通用超级强大的基于Oracle数据库的代码生成器
项目中使用了Oracle数据库,命名基本规范为表名和字段名全部大写,用下划线分割各个单词: 如“BASE_USER_LOGON_EXTEND”这个表表示用户登录的扩展表. 基于这个规范,通用权限管理系 ...
- 基于Oracle数据库登陆界面及功能实现 Java版
首先要在Oracle数据库创建表文件,包括建立表头以及关键字(唯一标识符),此次程序所用的表名称为SW_USER_INFO,表头有UNAME.UKEY.USEX等,关键字为UCC,然后添加一条记录,用 ...
- 基于oracle数据库存储过程的创建及调用
1.PLSQL编程 1.1概念和目的 PL/SQL(Procedure Language/SQL) PLSQL是Oracle对sql语言的过程化扩展 指在SQL命令语言中增加了过程处理语句(如分支.循 ...
- oracle学习1 基于oracle数据库的PLSQL编程以及存储过程的创建和使用视频
https://www.bilibili.com/video/av46777605 plsql中选择testWindow中可以进行测试 1.编写函数在plsql的testwindow中 begin d ...
- Oracle数据库编程:在JDBC中应用Oracle
9.在JDBC中应用Oracle: JDBC访问数据库基本步骤: 1.加载驱动 2.获取链接对象 3.创建SQL语句 4.提交S ...
- 基于Oracle的SQL优化(社区万众期待 数据库优化扛鼎巨著)
基于Oracle的SQL优化(社区万众期待数据库优化扛鼎巨著) 崔华 编 ISBN 978-7-121-21758-6 2014年1月出版 定价:128.00元 856页 16开 编辑推荐 本土O ...
- 基于ORACLE建表和循环回路来创建数据库存储过程SQL语句来实现
一个.概要 在实际的软件开发项目.我们经常会遇到需要创造更多的相同类型的数据库表或存储过程时,.例如.假设按照尾号点表的ID号,然后,你需要创建10用户信息表,的用户信息放在同一个表中. 对于类型同样 ...
- Oracle 数据库导入与出
Oracle 数据库导入与出 导出( EXPORT )是用 EXP 将数据库部分或全对象的结构和导出 . 导入( 导入( IMPORT )是用 )是用 IMP IMP将 OS 文件中的对象结构和数据装 ...
- 批量Excel数据导入Oracle数据库
由于一直基于Oracle数据库上做开发,因此常常会需要把大量的Excel数据导入到Oracle数据库中,其实如果从事SqlServer数据库的开发,那么思路也是一样的,本文主要介绍如何导入Excel数 ...
随机推荐
- Openstack swift 学习笔记
Swift 不是文件系统或者实时的数据存储系统,而是对象存储,用于长期存储永久类型的静态数据.这些数据可以检索.调整和必要时进行更新.Swift最适合虚拟机镜像.图片.邮件和存档备份这类数据的存储. ...
- 倍增lca-ZJOI2012 灾难
一个食物网有N个点,代表N种生物,如果生物x可以吃生物y,那么从y向x连一个有向边.这个图没有环.图中有一些点没有连出边,这些点代表的生物都是生产者,可以通过光合作用来生存: 而有连出边的点代表的都是 ...
- 洛谷P1054 等价表达式
P1054 等价表达式 题目描述 明明进了中学之后,学到了代数表达式.有一天,他碰到一个很麻烦的选择题.这个题目的题干中首先给出了一个代数表达式,然后列出了若干选项,每个选项也是一个代数表达式,题目的 ...
- 洛谷P1275 魔板
P1275 魔板 题目描述 有这样一种魔板:它是一个长方形的面板,被划分成n行m列的n*m个方格.每个方格内有一个小灯泡,灯泡的状态有两种(亮或暗).我们可以通过若干操作使魔板从一个状态改变为另一个状 ...
- vue使用webpack压缩后体积过大要怎么优化
vue使用webPack压缩后存储过大,怎么优化 在生产环境去除developtool选项 在webpack.config.js中设置的developtool选项,仅适用于开发环境,这样会造成打包成的 ...
- Android Gradle 学习笔记(六):Gradle 插件
Gradle 本身提供了一些基本的概念和整体核心的框架,其他用于描述真实使用场景的都可以通过插件扩展的方式来实现.这样就可以通过抽象的方式提供一个核心的框架,其他具体的功能和业务都通过插件扩展的方式来 ...
- django--权限(1)初识
一.权限表结构设计 1.认识权限 生活中处处有权限,比如,腾讯视频开会员才有观看某个最新电影的权限,你有房间钥匙就有了进入这个房间的权限,等等.同样,程序开发过程中也有权限,我们今天说的权限指的是we ...
- JD孔_20160901
1.买的 “[京东超市]GL格朗 耳温枪/电子体温计/温度计/耳温计EW-2” http://item.jd.com/385507.html 2.
- 029 Divide Two Integers 两数相除
不使用乘号,除号和取模符号将两数相除.如果溢出返回 MAX_INT.详见:https://leetcode.com/problems/divide-two-integers/description/ ...
- (转)linux route命令详解
linux route命令详解 原文:https://www.cnblogs.com/lpfuture/p/5857738.html && http://blog.csdn.n ...