一.需求分析
二.表结构分析
三.具体案例实现步骤
1.web开发所需环境和工具
2.根据表设计我们开始建实体类
3.根据需求分析图,我门将相对应方法依次实现
4.前面都是准备工作,现在我们可以开始写servlet了
2.根据用户所输的时间区间,点击查询,得到相对应时间段的订单,并以小时记生成的订单数
3.根据每小时生成的订单数,点击订单数得到相对应的订单详情
4.需要涉及的表结构:
1)订单表
2)订单详情表
3)书本表
4)书本类型表
2.表结构分析
这里使用的是Mysql 数据库
1.书本信息表(id,bookname,price,booktype)
2.书本类型表(id,typename)
3.订单信息表(id,no,total,price,createdate)
4.订单详情表(orderid,bookid)
共四个表格
连接MySQL数据库,导入jar包,代码:
package com.zking.order.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class DBHelper {
private static final String str="com.mysql.jdbc.Driver";//连接驱动地址
private static final String url="jdbc:mysql://localhost:3306/数据库名";
static {
try {
Class.forName(str);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getCon() {
Connection con=null;
try {
con=DriverManager.getConnection(url, "用户名", "密码");
} catch (Exception e) {
e.printStackTrace();
}
return con;
}
public static void dbClose(Connection con,PreparedStatement ps,ResultSet rs) {
try {
if(con!=null) {
con.close();
}
if(ps!=null) {
ps.close();
}
if(rs!=null) {
rs.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
三.具体案例实现步骤
1.web开发所需环境和工具
1)在后台功能实现方面,我们使用的开发工具是Eclipse和MySQL数据库
2)为方便,我们使用使用了一个layUI的日历插件;当然HTML5自带date类型日期的效果,可以的话没必要使用插件,但要想更加美观建议使用插件.
3)在前端我们使用BootStrap+jQuery达到一定的美化效果
4)在优化方面我们采用了Ajax技术和JSON(这里使用的json版本是net.sf.json),最后实现无刷新查询数据
2.根据表设计我们开始建实体类
…………
根据需要创建servlet
查询第一个表格的servlet:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//获取writer对象 用于写出数据到前端Ajax
PrintWriter out = response.getWriter();
//起始时间
String start = request.getParameter("start");
//结束时间
String end = request.getParameter("end");
//实例化订单的dao方法
Oroderdao od = new Oroderdao();
// 根据时段查询订单
Set<order> olist = od.getOrder(start, end);
//将要遍历的订单时间存在set集合中 并排序
Set<String> set = new TreeSet<String>();
// 遍历olist集合得到所有的日期
for (order order : olist) {
set.add(order.getD().substring(0, 10));// 获取日期 年月日
}
// 定义一个map集合用于遍历订单统计数 第一个参数为日期年月日(唯一,为建),第二个参数为24小时(值)
Map<String, List<Integer>> map = new TreeMap<String,List<Integer>>();
//遍历set集合 即所有的年月日
for (String str : set) {
//定义一个list集合 用于存24小时 注意使用的是list集合 有序有下标 便于数据遍历
List<Integer> lnumber = new ArrayList<Integer>();
//遍历24小时
for (int i = 0; i < 24; i++) {
//调用 根据日期年月日 时 来统计该小时数的订单总数
Integer it = od.getTime(str, i);
if(it==null) {
it=0;
}
//将24小时顺序加入lnumber集合中
lnumber.add(it);
}
//依次将map集合中添加获取到的 该时段的订单统计数
map.put(str, lnumber);
}
//最后使用JSONObject存储map集合 并将值传到前端Ajax
String fo=JSON.toJSONString(map);
out.print(fo);//传值
//一定要清空缓存和关闭 否则有时候会报你意想不到的错误
out.flush();
out.close();
}
查询第二个表格的servlet:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//设置编码格式 如果页面较多 建议使用过滤器
request.setCharacterEncoding(“utf-8”);
response.setCharacterEncoding(“utf-8”);
response.setContentType(“text/html;charset=utf-8”);
//获取writer对象 用于写出值
PrintWriter out=response.getWriter();
//获取时间 该时间格式在前端已处理过
String time=request.getParameter("time");
//调用订单详细的方法
Oroderdao oid=new Oroderdao();
//根据指定时间段查询对应的订单详情
List<Ordermessage> all = oid.getAll(time);
//将all集合存储到json中
// JSONArray fo = JSONArray.fromObject(all);
String fo = JSON.toJSONString(all);
//System.out.println(fo);
//传值
out.print(fo);
//再次强调一定要 清除缓存和关闭!!!!!
out.flush();
out.close();
}
首页的代码:插件需要自己下载