飞机订票系统——基于JDBC数据库技术的Java web项目

这个系统是我在大三上学期的软件工程课程设计环节和同学一起合作的项目,涉及到的技术比较基础。所以趁着有空本人写一篇博客翻翻旧账~

一、准备工作

  1. 下载并安装Eclipse for java ee
    这个不用多说,java最常用的IDE,包括配置JDK在内都是基本工作,一般学校的学生在大二的课程安排中就已经学过,这里不再过多叙述。

  2. 下载并安装 Tomcat Sever v8.0以上版本
    Tomcat是免费的开放源代码的Web轻量级应用服务器 (这里是下载链接) ,同时也在这个项目中作为整个网页的容器使用,其中详细配置也无需赘述,注意下载完成后需要进入eclipse里调试。

  3. 轻量级数据库MySql
    下载安装步骤比较繁琐,我是在B站找到视频然后照着视频一步一步复制过去的。
    这里有一点需要注意:就是安装Mysql时最好一并安装Command Line Client,也就是自带命令行程序。因为这样会省去你通过windows进入命令行去搜索Mysql的时间,比较方便。并且就我个人而言,我开始没有安装命令行程序,结果在用命令行搜索Mysql成功了几次后,系统开始拒绝我访问数据库,root密码也不好使。最后无奈只好重新安装,新安装了Command Line Client,然后问题解决…

二、前端页面设计
大三上学期课程安排有限,关于前端设计学了Html,CSS,JavaScript的皮毛中的皮毛…总之以我们吊儿郎当的水平做一个高大上的前端页面实在太困难,于是我的大佬小伙伴在网上找了一个jQuery模板加以修改,然后变成了如下这个样子:
如图,登录界面样式
看起来很高大上,然而我们只负责修改~

三、JDBC数据库连接
这个部分相对来说最难(其实也没有什么技术含量)JDBC的大名课上早已听过多次,然而实际操作起来才发现真的没有看上去那么容易。

  1. 登录界面的实现
    首先是创建数据库 先输入密码root进入mysql命令行,然后进入一个数据库,创建表(由于年代久远,数据库原代码已经很难找到,创建完成后的原表如下:
    在这里插入图片描述

     可以清楚地看到该表的四个属性,其中username肯定是主键没错
    

表已经建好了,下一步就是将表通过JDBC与项目连接了。
由于小伙伴们那时自学水平有限,没有使用mvc的开发模式,自然也没有配置过xml文件,所以以下的后台程序完全由login.jsp完成。

让我们逐段分析login.jsp里JDBC的代码部分:

request.setCharacterEncoding(“utf-8”);
String username=request.getParameter(“userName”);
String password=request.getParameter(“passWord”);
request.setCharacterEncoding(“utf-8”);
String username=request.getParameter(“userName”);
String password=request.getParameter(“passWord”);

这里request.setCharacterEncoding(“utf-8”)的作用是设置对客户端请求进行重新编码。编码方式为utf-8。众所周知jsp默认的编码方式是iso-5589-1,这种编码方式不支持中文,所以改变编码方式必不可少。此外,request对象的getParameter(id)方法负责将前端页面中特定id的表单里所蕴含的参数提取。注意它的返回类型是字符串。
紧接下来,开始启动JDBC:

Class.forName(“com.mysql.jdbc.Driver”);
Connection conn = DriverManager.getConnection(“jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8”, “root”, “root”);

第一行是利用forName()方法加载并获取数据库驱动。jdbc包的导入有如下几个步骤:
一、在http://dev.mysql.com/downloads/connector/j/页面中下载jdbc包。
二、在项目的WebContent文件夹下的lib目录下将mysql-connection.jar包拖过去。

完成前两个步骤,一般来说java程序可以导入并使用了,然而本程序中仅完成这两个步骤程序还是报错。经过无数次的崩溃调试,我们找到了问题所在,也就是第三步。(然而原理不甚清楚)。

三、对mysql-connection.jar点击右键–>build path–>Order and Export–>apply
似乎要在jsp上使用包的话,就得这么做…

再看第二行DriverManager()获取数据库连接。这里又有一个不易察觉的问题:
getConnection()有三个参数:URL,用户名和密码。其中第一个参数URL里面我除了端口号和数据库名字之外,还多加了一行调整时区的语句。这是因为用户下载了mysql之后默认其电脑所处时区为零时区。这样的话启动数据库会因其与本机时区不匹配而无法正常运行。我们所处时区为东八区,所以需要修改时区指令让它自增8:00。
修改时区有三个方法,其中一个是修改自己电脑的时间(捂脸)
…好吧这个沙雕方法没人喜欢,,那么第二个方法也是最主流的方法,就是修改mysql安装路径里的my.ini文件,在里面加上对应指令,万事大吉。然而有的小伙伴和我一样,一波智障操作将mysql安装到C盘,然后因为权限不够无法修改文件…
那么我机灵的搭档想到了第三个方法,即在每次启动数据库时,在getConnection()方法中加入时区修改指令,也能完成修改。本人对这波操作是很佩服的。

我们接着往下看:

String sql=“select * from tb_ticketuser where username=? and password=?”;
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, username);
ps.setString(2, password);
ResultSet rs=ps.executeQuery();

执行查询语句的方法有很多,我们这里算一种,当时看这样写没有bug就这么用了。其中PaparedStatement()负责将sql语句参数化,executeQuery()语句负责执行查询结果并以Resultset的类型返回。

if(rs.next()) {
session.setAttribute(“username”, rs.getString(1));
session.setAttribute(“password”, rs.getString(2));
session.setAttribute(“phone”, rs.getString(3));
session.setAttribute(“id”, rs.getString(4));
response.sendRedirect(“http://localhost:1080/CourseProject2.0/SearchFlight.jsp”);
}else {
JOptionPane.showMessageDialog(null,“用户名或密码错误,请重新登录”);
response.sendRedirect(“http://localhost:1080/CourseProject2.0/Login.jsp”);
//response.sendRedirect(“http://localhost:1080/CourseProject2.0/reserveTicket.jsp”);
}
ps.close();
conn.close();

这里是响应部分。如果用户名和密码正确,setAttribute()方法会将值存到session对象中,session对象的生命周期也还算长,它可以将数据共享到下一个页面中。然后重定向到下一个页面中。如果用户名密码不正确,那么用swing的gui界面来处理登录错误提示,然后重定向到原页面。

其他页面和登录页面相差无几,在这里我们看一下其他页面效果:

首先是机票数据库:
在这里插入dsdd
哈哈哈为了弄这个数据库我查了不少机场资料。
然后是检索代码,原理如上。

request.setCharacterEncoding(“utf-8”);
String depart=request.getParameter(“DepartCity”);
String destination=request.getParameter(“DestinationCity”);
String departTime=request.getParameter(“DepartTime”);
String classes=request.getParameter(“TicketType”);
/* out.println(depart);
out.println(destination);
out.println(departTime);
out.println(classes);
*/ Class.forName(“com.mysql.jdbc.Driver”);
Connection conn = DriverManager.getConnection(“jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8”, “root”, “root”);
String sql1=“select * from tb_ticket where 始发地=? and 目的地=? and 始发时间=? and 舱位类型=?”;
PreparedStatement ps = conn.prepareStatement(sql1);
ps.setString(1,depart);
ps.setString(2, destination);
ps.setString(3, departTime);
ps.setString(4, classes);
ResultSet rs=ps.executeQuery();
if(rs.next()) {
session.setAttribute(“FlightNumber”,rs.getString(1));
session.setAttribute(“depart”,rs.getString(2));
session.setAttribute(“destination”,rs.getString(3));
session.setAttribute(“departTime”,rs.getString(4));
session.setAttribute(“FlyingTime”, rs.getString(5));
session.setAttribute(“price”, rs.getString(6));
session.setAttribute(“type”, rs.getString(7));
session.setAttribute(“time”, rs.getString(8));
session.setAttribute(“detail”, rs.getString(9));

response.sendRedirect(“http://localhost:1080/CourseProject2.0/TicketBooking.jsp”);
}else {
JOptionPane.showMessageDialog(null,“很遗憾,当前没有您想要的查询结果”);
response.sendRedirect(“http://localhost:1080/CourseProject2.0/SearchFlight.jsp”);
}

页面效果如下,首先是查票界面
在这里插入图片描述
点击“我要查询”:
在这里插入图片描述
由于时间和篇幅有限,其他功能不一一详细介绍。
这次课设是本人大学期间为数不多的认真完成的一个项目,虽然技术含量不是特别高,但它给了我一定的信心。上个学期我并没有认真听过课,所以到了课设所用知识只能自学,能够完成这个项目确实已经花了不少时间。这似乎有一些讽刺,但也算是很有纪念意义的一次经历。

  • 6
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值