被老板逼着实现了Excle的透视表分析算法
package com.example.demo;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.ContextHierarchy;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import com.alibaba.fastjson.JSON;
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextHierarchy({ @ContextConfiguration(locations = { "file:src/main/webapp/WEB-INF/applicationContext.xml" }),
@ContextConfiguration(locations = { "file:src/main/webapp/WEB-INF/spring-mvc-servlet.xml" }) })
public class QueryTest {
public static void main(String[] args) throws SQLException {
List l = new ArrayList();
l.add(new FieldDefinitionDomain("zz","int","money","line"));
l.add(new FieldDefinitionDomain("xx","String","date","row"));
l.add(new FieldDefinitionDomain("zz","String","company","row") );
String fieldJsonList = JSON.toJSONString(l);
Map fieldMap = new HashMap();
List<FieldDefinitionDomain> parseArray = JSON.parseArray(fieldJsonList, FieldDefinitionDomain.class);
ArrayList<String[]> strlist = new ArrayList<>();
List<String[]> intList = new ArrayList<>();
String headfieldName = null;
String headType = null;
String headTableName = null;
String headDirection = null;
for (FieldDefinitionDomain fd : parseArray) {
String [] strarray = new String[4];
strarray[0] = fd.getTableName();
strarray[1] = fd.getFieldName();
strarray[2] = fd.getType();
strarray[3] = fd.getDirection();
if(fd.getType().equals("int")||fd.getType().equals("long")) {
intList.add(strarray);
}else {
strlist.add(strarray);
}
}
headTableName = strlist.get(0)[0];
headfieldName = strlist.get(0)[1];
headType = strlist.get(0)[2];
headDirection = strlist.get(0)[3];
for (String[] array : strlist) {
if(!array[1].equals(headfieldName)) {
List arrayList = new ArrayList();
addList(arrayList,array);
fieldMap.put(array[0], arrayList);
}
}
List<Integer> iilist = new ArrayList();
for (String[] array : intList) {
List list = (List)fieldMap.get(array[0]);
if(!notEmpty(list)) {
List arrayList = new ArrayList();
addList(arrayList,array);
fieldMap.put(array[0], arrayList);
}
((List)list.get(0)).add(array[1]);//字段名
((List)list.get(1)).add(array[2]);//字段类型
((List)list.get(2)).add(array[3]);//排列(行还是竖)
iilist.add(((List)list.get(2)).size());
}
List resultList = new ArrayList();
TableSQLUtils tableSQLUtils = new TableSQLUtils();
List list = tableSQLUtils.query(headTableName, headType, headfieldName, null);
Map mm = new HashMap();
list.forEach(ll1 ->mm.put(((List)ll1).get(0), new ArrayList()));
for (Object o2 : fieldMap.keySet()) {
List llist= (List)fieldMap.get(o2);
List fieldList = (List) llist.get(0);
List typeList = (List) llist.get(1);
String fieldStr = headfieldName+",";
String typeStr = headType+",";
for (Object object : fieldList) {
fieldStr+=object+",";
}
for (Object object : typeList) {
typeStr+=object+",";
}
fieldStr=fieldStr.substring(0,fieldStr.length()-1);
typeStr=typeStr.substring(0,typeStr.length()-1);
List query = tableSQLUtils.query((String)o2, typeStr, fieldStr,null);
query.forEach(ll->{
List ll1 = (List)ll;
List ll2 = ((List) mm.get(ll1.get(0)));
if(ll2!=null)
ll2.add(ll1);
});
mm.put("numberindex", iilist);
System.out.println(mm);
}
}
private static void addList(List arrayList, String[] array) {
List arrayList2 = new ArrayList();
List arrayList3 = new ArrayList();
List arrayList4 = new ArrayList();
arrayList2.add(array[1]);
arrayList3.add(array[2]);
arrayList4.add(array[3]);
arrayList.add(arrayList2);
arrayList.add(arrayList3);
arrayList.add(arrayList4);
}
private static void sum(List <Long> list) {
Long sum = 0L;
if(notEmpty(list)) {
for (int i = 0; i < list.size(); i++) {
sum+=list.get(i);
}
list.add(sum);
}
}
public static Boolean notEmpty(List list) {
if(list!=null&&list.size()>0)return true;
return false;
}
}
package com.example.demo;
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.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class TableSQLUtils {
private String driver="com.mysql.jdbc.Driver";
private String username="finance_uatuser";
private String password="e2guTHK2U6y_G2o0LTQJGneTuWOOqp/wy";
private String url="jdbc:mysql://121.43.155.144:3306/finance_uat?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull";
public List query(String table,String type,String fieldName,String prefs) throws SQLException {
Connection connection = null;
PreparedStatement prepareStatement =null;
ResultSet rs = null;
// Map m = new HashMap();
Map map = new HashMap();
String[] fieldsplit = fieldName.split(",");
List resultList = new ArrayList();
String[] types = type.split(",");
// if(fieldsplit.length>1) {
// for (int i = 1; i < fieldsplit.length; i++) {
// map.put(fieldsplit[i],new ArrayList());
// }
// }if(fieldsplit.length==1) {
// for (int i = 0; i < fieldsplit.length; i++) {
// map.put(fieldsplit[i],new ArrayList());
// }
// }
try {
//1.获取Connection
connection = getConnection();
//3.准备Sql
String sql = "select ";
for (String sf : fieldsplit) {
sql+=sf+",";
}
sql=sql.substring(0, sql.length()-1);
sql+=" from "+table;
//if(fieldsplit.length>1)
// sql+=" where "+fieldsplit[0]+" = ?";
prepareStatement = connection.prepareStatement(sql);
//if(fieldsplit.length>1)
//prepareStatement.setString(1,prefs);
//4.执行查询,得到ResultSet
rs = prepareStatement.executeQuery();
//5.处理ResultSet
while(rs.next()){
//rs.get+数据库中对应的类型+(数据库中对应的列别名)
switchType(types,fieldsplit,rs,resultList);
}
return resultList;
} catch (Exception e) {
e.printStackTrace();
return null;
}finally{
rs.close();
prepareStatement.close();
connection.close();
}
}
private void switchType(String[] types, String[] field, ResultSet rs, List resultList) throws SQLException {
List arr = new ArrayList();
for (int i = 0; i < field.length; i++) {
listAdd(rs,types[i],field[i], arr);
}
resultList.add(arr);
}
private void listAdd(ResultSet rs,String type, String field, List arr) throws SQLException {
Object o = null;
if(type.equals("int")) {
o = (long) rs.getInt(field);
}
if(type.equals("String")) {
o = rs.getString(field);
}
if(type.equals("Long")) {
o = rs.getLong(field);
}
arr.add(o);
}
private Connection getConnection() throws ClassNotFoundException, SQLException {
Class.forName(driver);
Connection connection = DriverManager.getConnection(url, username, password);
return connection;
}
public static void main(String[] args) throws SQLException {
TableSQLUtils tableSQLUtils = new TableSQLUtils();
List query = tableSQLUtils.query("zz", "String,int", "date,money",null);
query.forEach(str->System.out.println(str));
}
}
被老板逼着实现了Excle的透视表分析算法的更多相关文章
- 【Excle数据透视表】如何新建数据透视表样式
如果觉得Excle给出的数据透视表样式不符合自己的心意,可以自己定义一个数据透视表样式 步骤1 单击数据透视表区域任意单元格→数据透视表工具→设计→样式组中的下拉按钮,打开数据透视表样式库→新建数据透 ...
- 【Excle数据透视表】如何按照地区交替填充背景颜色
现存在如下数据透视表 需要根据地区填充不同的背景颜色 步骤 选定数值区域→开始→条件格式→新建规则,出现如下窗口: 公式:=MOD(COUNT(1/(MATCH($A$4:$A4,$A$4:$A4,) ...
- 【Excle数据透视表】如何让字段标题不显示“求和项”
我们做好了数据透视表之后是下面这个样子的 这个样子一点都不好看,那么如何去掉"求和项"呢? 步骤 方法① 单击B3单元格→编辑区域输入"数量 "→Enter(也 ...
- 【Excle数据透视表】如何为数据透视表应用样式
如下数据透视表样例,如何为该数据透视表设置样式呢? 步骤 单击数据透视表区域的任意单元格→数据透视表工具→设计→数据透视表样式→打开下拉箭头即可任意选择
- 【Excle数据透视表】如何水平并排显示报表筛选区域的字段
原始效果 目标效果 解决方案 设置数据透视表"在报表区域筛选显示字段"为"水平并排" 步骤 方法① 单击数据透视表任意单元格→数据透视表工具→分析→选项→布局和 ...
- 【Excle数据透视表】如何在数据透视表中使用合并单元格标志
先有数据透视表如下: 现在看着这个格式不舒服,我们希望调整成如下这种样式 步骤 单击数据透视表任意单元格→右键→数据透视表选项→布局和格式→合并且居中排列带标签的单元格 注意:如果数据透视表报表布局不 ...
- 【Excle数据透视表】如何在组的顶部显示分类汇总
调整前 调整后 例 ...
- 【Excle数据透视表】如何重复显示行字段的项目标签
前提:该数据透视表以表格形式显示 解决办法: 通过报表布局设置"重复所有项目标签" 修改前样式 步骤 单击数据透视表中任意单元格→设计→报表布局→重复所有项目标签 修改后样式
- 【Excle数据透视表】如何调整压缩形式显示下的缩进字符数
调整前: ...
随机推荐
- 206 Reverse Linked List 反转链表
反转一个单链表.进阶:链表可以迭代或递归地反转.你能否两个都实现一遍?详见:https://leetcode.com/problems/reverse-linked-list/description/ ...
- URAL1389. Roadworks(dp)
1389 算个简单的树形DP吧 不知道是不是数据太水 竟然一A了 就是对于当前节点有没有被选中就行选最优 有没有被选中的意思是有没有与它相连的边被选中 #include <iostream> ...
- 关于springMVC传参问题
今天写项目,碰到一个以前灭有注意到的问题,一般情况下使用springMVC @Controller注解之后,被此注解标记的方法的参数名只需要跟页面表单的标签的name的值相同即可拿到页面的值,但是如果 ...
- SSH---整合Struts2&Spring&Hibernate(实例)
一.SSH回顾 Struts2:核心为过滤器+拦截器.过程:Filter--->FilterDispatcher-->ActionMapper-->ActionProxy--> ...
- JS中的逻辑运算符&&、||,位运算符|,&
1.JS中的||符号: 运算方法: 只要“||”前面为false,不管“||”后面是true还是false,都返回“||”后面的值. 只要“||”前面为true,不管“||”后面是true还是fals ...
- js阻塞ui进程涉及的知识点整理
项目进行中遇到了同步ajax阻塞ui线程阻塞的问题,原因是执行两个同步ajax请求为一次完整的方法,因业务需求需要循环执行这个方法,检查后台返回的数据正确,但是由于ajax请求时间过长,考虑增加遮罩层 ...
- WindowsService+Quartz.NET快速搭建
新建一个Windows服务项目 nuget安装Quartz.NET,我这边使用的是2.3.3版本 1. Service改名 2. 添加安装程序,改名 3. ServiceInstaller->属 ...
- js设计模式-发布/订阅模式
一.前言 发布订阅模式,基于一个主题/事件通道,希望接收通知的对象(称为subscriber)通过自定义事件订阅主题,被激活事件的对象(称为publisher)通过发布主题事件的方式被通知. 就和用户 ...
- 【转】nABC法-产品分析思路
Needs:需求N1,用户最基本需求是什么?N2,市场有多大?N3,行业链如何构成?N4,行业发展趋势如何?N5,扩充的需求有哪些? Approach:解决方案A1,解决方案如何构成?A2,需求优先级 ...
- CentOS7 Install Consul
Centos7 Install Consul 原文链接:http://www.cnblogs.com/caoguo/p/5959962.html 1) 环境 2) 安装 # yum install - ...