echart报表插件使用笔记(二)--按月统计

按月统计注冊人数

java类:

package com.spring.controller;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONArray;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.ServletRequestUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class EchartController {

	/**
	 * Echart报表按月份统计
	 */
	@RequestMapping(value = "user/month", method = { RequestMethod.POST,
			RequestMethod.GET })
	public ModelAndView monthStatistics(HttpServletRequest request,
			HttpServletResponse response) throws IOException {

		String year = ServletRequestUtils.getStringParameter(request, "year",
				"2014");
		ModelAndView mav = new ModelAndView();
		MySqlData mySqlData = new MySqlData();
		Map<Object, Object> map = new HashMap<Object, Object>();
		map = mySqlData.selectMonth(year);

		List<Integer> data = new ArrayList<Integer>();
		List<String> month = new ArrayList<String>();

		// 遍历map
		/*
		 * Iterator<Entry<Object, Object>> it = map.entrySet().iterator(); while
		 * (it.hasNext()) {
		 *
		 * @SuppressWarnings("rawtypes") Map.Entry entry = (Map.Entry)
		 * it.next(); String key = (String) entry.getKey(); Integer value =
		 * Integer.valueOf((String) entry.getValue());
		 * System.out.println("--------"+key); data.add(value);//数据
		 * month.add(key);//月份 }
		 */

		// 遍历2map
		for (Object m : map.keySet()) {
			Integer value = Integer.valueOf((String) map.get(m));
			System.out.println("--------" + m);
			data.add(value);// 数据
			month.add(m + "月");// 月份
		}

		mav.addObject("time", new Date());
		// mav.addObject("jsonMap",
		// JSONArray.fromObject(map));//将map转换为json数组//map转为json时map的key必须是string类型的
		mav.addObject("jsonData", JSONArray.fromObject(data));// 将list转换为json数组
		mav.addObject("jsonMonth", JSONArray.fromObject(month));// 将list转换为json数组
		mav.setViewName("echart/monthEchart");//
		return mav;
	}

	// ///////////////////////////////////////////////////////////////////////////////////////////////////////
	// /内部类
	class MySqlData {
		private String username;
		private String password;
		private Connection connection;
		private PreparedStatement ps;

		// //构造函数
		public MySqlData() {
			// TODO Auto-generated constructor stub

			String url = "jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull";
			String username = "root";
			String password = "";
			// 载入驱动程序以连接数据库
			try {
				Class.forName("com.mysql.jdbc.Driver");
				connection = DriverManager.getConnection(url, username,
						password);
			}
			// 捕获载入驱动程序异常
			catch (ClassNotFoundException cnfex) {
				System.err.println("装载 JDBC/ODBC 驱动程序失败");
				cnfex.printStackTrace();
			}
			// 捕获连接数据库异常
			catch (SQLException sqlex) {
				System.err.println("无法连接数据库");
				sqlex.printStackTrace();
			}

		}

		// 查询方法1
		/*
		 * select DATE_FORMAT(date_added,‘%Y-%m‘) as month,count(*) as shumu
		 * from user where DATE_FORMAT(date_added,‘%Y‘)=2014 group by month
		 * order by month;
		 */
		public Map<Object, Object> selectMonth(String year) {
			List<Object> maplist = new ArrayList<Object>();
			Map<Object, Object> map = new HashMap<Object, Object>();
			try {
				ps = connection
						.prepareStatement("select DATE_FORMAT(ptime,‘%m‘) as month,count(*) as shumu from cc_user "
								+ " where DATE_FORMAT(ptime,‘%Y‘)=? group by month order by month;");
				ps.setString(1, year);

				ResultSet rs = ps.executeQuery();
				while (rs.next()) {
					map.put(rs.getInt("month"), rs.getString("shumu"));
					System.out.println("月份:" + rs.getString("month") + "数目:"
							+ rs.getString("shumu"));
					maplist.add(map);
				}

			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			return map;

		}

	}// 内部类

}// /echart类

页面:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>My JSP ‘monthEchart.jsp‘ starting page</title>

	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
<script src="<%=basePath%>js/jquery.min.js"></script>
<script type="text/javascript" src="<%=basePath%>resources/echart/esl.js"></script>
  </head>

  <body>
       		<div id="main" style="height:400px"></div>

	    <script type="text/javascript">
	        // 路径配置
	        require.config({
	            paths:{
	                ‘echarts‘ : ‘resources/echart/echarts‘,
	                ‘echarts/chart/bar‘ : ‘resources/echart/echarts‘
	            }
	        });

	        // 使用
	        require(
	            [
	                ‘echarts‘,
	                ‘echarts/chart/bar‘ // 使用柱状图就载入bar模块,按需载入
	            ],
	            function (ec) {
	                // 基于准备好的dom。初始化echarts图表
	                var myChart = ec.init(document.getElementById(‘main‘)); 

	                var jsonData=${jsonData};//接收后台传过来的json数组
	                alert(jsonData);

	                var jsonMonth=${jsonMonth};
	                alert(jsonMonth);

	                //便利json数组
	              /*   $.each(json,function(n,value) {
	                	alert(value)
	                }); */

	                var option = {
	                    tooltip: {
	                        show: true
	                    },
	                    legend: {
	                        data:[‘注冊人数‘]
	                    },
	                    xAxis : [
	                        {
	                            type : ‘category‘,
	                            data : ["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月",]
	                        }
	                    ],
	                    yAxis : [
	                        {
	                            type : ‘value‘
	                        }
	                    ],
	                    series : [
	                        {
	                            "name":"注冊人数",
	                            "type":"bar",
	                            itemStyle: {
	                                normal: {
	                                	//柱状图颜色
	                                    color: ‘#0080ff‘,
	                                    label: {
	                                         show: true,
	                                         //position : ‘inside‘,
	                                         formatter : ‘{b}‘,
	                                         textStyle: {
	                                             color: ‘#10E922‘
	                                         }
	                                     }
	                                }
	                            },
	                            "data":jsonData
	                        }
	                    ]
	                };

	                // 为echarts对象载入数据
	                myChart.setOption(option);
	            }
	        );
	    </script>
  </body>
</html>

执行效果图:

时间: 2024-11-07 21:44:43

echart报表插件使用笔记(二)--按月统计的相关文章

EChart报表插件使用笔记(1)

报表插件Echart java类 package com.spring.controller; import java.io.IOException; import java.util.Arrays; import java.util.Date; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net

ionic3引用外部插件--百度地图及echart报表的使用

前言 ionic3提供的组件已经相当丰富咯,但是事实上有些特殊的需求,比如使用百度地图,或者第三方插件echart报表插件是,就不能用传统的方式去使用第三方插件咯,如何在Ionic3项目中使用第三方JavaScript库?.其实特别简单啦,跟着我步伐前进吧. 使用步骤如下 环境安装 1, 安装ChartJs库 cd /项目的根目录下 npm install chart.js --save 2, 全局安装typings npm install -g typings 3.找到自己的项目新建一个dec

《卓有成效的程序员》----读书笔记二

六大方面对比Launchy和TypeAndRun(TAR) 对于快速启动工具,很多人都有自己的偏好,多次听到朋友介绍Launchy的好,虽然自己一直在使用着TAR,还是克制不住对于好软件的渴求,下载Launchy进行试用.很多软件都是有一个试用期的,也许新的软件确实不错,但是你习惯了以前使用的那个软件.今天就比较客观的将Launchy和TAR进行一下对比,从界面.上手速度到功能.自定义,以及软件的稳定性.占用资源进行详细的比较. [界面美观]Launchy:毫无疑问这是它的强项.1.0正式版自带

《R实战》读书笔记二

第一章 R简介 本章概要 1安装R 2理解R语言 3运行R程序 本章所介绍的内容概括如下. 一个典型的数据分析步骤如图1所示. 图1:典型数据分析步骤 简而言之,现今的数据分析要求我们从多种数据源中获取数据.数据合并.标注.清洗和分析,并且把分析的结果进行展示,形成报告或者系统,辅助决策.R能够满足现今数据分析的要求. 为什么用R? R是一个适合统计分析和绘图的环境与语言.它是开源.免费的,获得世界范围社区支持.统计分析和绘图工具已经很多了,例如:SPSS,SAS,Excel,Stata和Min

webpy使用笔记(二) session/sessionid的使用

webpy使用笔记(二) session的使用 webpy使用系列之session的使用,虽然工作中使用的是django,但是自己并不喜欢那种大而全的东西~什么都给你准备好了,自己好像一个机器人一样赶着重复的基本工作,从在学校时候就养成了追究原理的习惯,从而有了这篇session的使用和说明. PS:其实有些总结的东西挺好的,想分享给大家看,而不是枯燥的代码,这东西说实话对其他人用处不大,但都被移除首页了~~ webpy中的session 下面为官方的例子,用session来存储页面访问的次数,

iOS9-by-Tutorials-学习笔记二:App-Search

iOS9-by-Tutorials-学习笔记二:App-Search 本文版权归作者所有,如需转载请联系孟祥月 CSDN博客:http://blog.csdn.net/mengxiangyue 独立博客:http://mengxiangyue.com 本文为自己读书的一个总结,可能与原书有一定出入 iOS 9推出了搜索技术,能够让用户在Spotlight中搜索到APP内部的内容.苹果提供了三个APP Search API: * NSUserActivity * Core Spotlight *

Android工作笔记之——7月第2周

一.Android TextView内容过长加省略号 android:ellipsize="end"   省略号在结尾 android:singleline="true" android:ellipsize="marquee"  跑马灯 :: 跑马灯这个属性似乎直接这样还不行,TextView只有在获取焦点后才会滚动显示隐藏文字,因此需要在包中新建一个类,继承TextView.重写isFocused方法,这个方法默认行为是,如果TextView获

Android学习笔记二

17. 在ContentProvider中定义的getType()方法是定义URI的内容类型. 18. SQLiteDatabase类中的insert/delete/update/query方法其实也挺好用的,我在EquipmentProvider类中做了实现 19. Android专门有个单元测试项目(Android Test Project),在这个项目中,可以新建一个继承AndroidTestCase类的具体测试类来单元测试某个功能.我新建了一个AndroidTestProject项目,在

Android插件化(二):使用DexClassLoader动态加载assets中的apk

Android插件化(二):使用DexClassLoader动态加载assets中的apk 简介 上一篇博客讲到,我们可以使用MultiDex.java加载离线的apk文件.需要注意的是,apk中的类是加载到当前的PathClassLoader当中的,如果apk文件过多,可能会出现ANR的情况.那么,我们能不能使用DexClassLoader加载apk呢?当然是可以的!首先看一下Doc文档. A class loader that loads classes from .jar and .apk