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数 ...
随机推荐
- 洛谷P2119 魔法阵
P2119 魔法阵 题目描述 六十年一次的魔法战争就要开始了,大魔法师准备从附近的魔法场中汲取魔法能量. 大魔法师有m个魔法物品,编号分别为1,2,...,m.每个物品具有一个魔法值,我们用Xi表示编 ...
- Claris’ Contest # 2 Day 2 Problem C. Dash Speed(分治+可持久化并查集+树剖)
题面 题解 \(std\)爆栈了→_→ 我们先考虑一个简化的问题,如果只有加边的情况下如何动态维护直径 合并两棵树时,设\(a,b\)为\(A\)的直径的两个端点,\(c,d\)为\(B\)的直径的两 ...
- idea长用快捷键
1CA(ctrl+alt) 1.1(记忆mlv) ctrl alt m 代码封装成方法 ctrl alt L格式化代码 ctrl alt v补全返回值 (eclipse: alt shift l) 1 ...
- 课堂笔记 layout 布局、手风琴accordion、选项卡tabs
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- php模拟post提交数据
$data = '{ "id": "17999030", "method": "sayHello", "jso ...
- netstat命令怎么查看端口是否占用
转自:http://www.ahlinux.com/start/cmd/527.html netstat命令是一个监控TCP IP网络的非常有用的工具,它可以显示路由表.实际的网络连接以及每一个网络接 ...
- superset 配置连接 hbase
1. 简单说明 最近配置superset查询hbase, 根据网上查询到的文档和经验,成功了一次(python3.4 superset 0.20.),后边重试换各种版本就不行了.最后根据错误终于发现 ...
- 牛客网Java刷题知识点之插入排序(直接插入排序和希尔排序)、选择排序(直接选择排序和堆排序)、冒泡排序、快速排序、归并排序和基数排序(博主推荐)
不多说,直接上干货! 插入排序包括直接插入排序.希尔排序. 1.直接插入排序: 如何写成代码: 首先设定插入次数,即循环次数,for(int i=1;i<length;i++),1个数的那次不用 ...
- SQL判断经纬度在矩形内
1,将城市地图拆分等距拆分为矩形 数据结构如图: 2.查看高德JS API (点是否在多边形内)核心代码: a=[114.069564,22.545774]; b=[ [114.067595,22.5 ...
- Maven的学习资料收集--(三)使用Maven构建Web项目
新建Maven项目 File - New - Other 选择Maven Project 单击Next 保持默认即可单击Next 选择Archetype为 web app单击Next 输入一些必要信息 ...