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&amp;characterEncoding=UTF-8&amp;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的透视表分析算法的更多相关文章

  1. 【Excle数据透视表】如何新建数据透视表样式

    如果觉得Excle给出的数据透视表样式不符合自己的心意,可以自己定义一个数据透视表样式 步骤1 单击数据透视表区域任意单元格→数据透视表工具→设计→样式组中的下拉按钮,打开数据透视表样式库→新建数据透 ...

  2. 【Excle数据透视表】如何按照地区交替填充背景颜色

    现存在如下数据透视表 需要根据地区填充不同的背景颜色 步骤 选定数值区域→开始→条件格式→新建规则,出现如下窗口: 公式:=MOD(COUNT(1/(MATCH($A$4:$A4,$A$4:$A4,) ...

  3. 【Excle数据透视表】如何让字段标题不显示“求和项”

    我们做好了数据透视表之后是下面这个样子的 这个样子一点都不好看,那么如何去掉"求和项"呢? 步骤 方法① 单击B3单元格→编辑区域输入"数量 "→Enter(也 ...

  4. 【Excle数据透视表】如何为数据透视表应用样式

    如下数据透视表样例,如何为该数据透视表设置样式呢? 步骤 单击数据透视表区域的任意单元格→数据透视表工具→设计→数据透视表样式→打开下拉箭头即可任意选择

  5. 【Excle数据透视表】如何水平并排显示报表筛选区域的字段

    原始效果 目标效果 解决方案 设置数据透视表"在报表区域筛选显示字段"为"水平并排" 步骤 方法① 单击数据透视表任意单元格→数据透视表工具→分析→选项→布局和 ...

  6. 【Excle数据透视表】如何在数据透视表中使用合并单元格标志

    先有数据透视表如下: 现在看着这个格式不舒服,我们希望调整成如下这种样式 步骤 单击数据透视表任意单元格→右键→数据透视表选项→布局和格式→合并且居中排列带标签的单元格 注意:如果数据透视表报表布局不 ...

  7. 【Excle数据透视表】如何在组的顶部显示分类汇总

    调整前                                                                                     调整后        例 ...

  8. 【Excle数据透视表】如何重复显示行字段的项目标签

    前提:该数据透视表以表格形式显示 解决办法: 通过报表布局设置"重复所有项目标签" 修改前样式 步骤 单击数据透视表中任意单元格→设计→报表布局→重复所有项目标签 修改后样式

  9. 【Excle数据透视表】如何调整压缩形式显示下的缩进字符数

    调整前:                                                                                                 ...

随机推荐

  1. 转-Mac下Apache Tomcat安装配置

    ava Web如果稍微知道一点,一般对Tomcat都不会陌生,Apache是普通服务器,本身只支持html即普通网页,可以通过插件支持PHP,还可以与Tomcat连通(单向Apache连接Tomcat ...

  2. LD_LIBRARY_PATH与-L的关系以及延伸

    最近跟同学讨论c++在编译时g++ -L.. 和LD_LIBRARY_PATH的问题,今天在做一个东西的时候发现,我对这两个东西的理解是错误的,经过一番研究,写下我对这些东西的想法,如果有不对的地方, ...

  3. Spring日期格式初始化

    原文链接地址 一.初始化参数绑定[一种日期格式] 配置步骤: ①:在applicationcontext.xml中只需要配置一个包扫描器即可 1 2 <!-- 包扫描器 -->       ...

  4. HashMap和List遍历方法总结及如何遍历删除元素

    https://blog.csdn.net/demohui/article/details/77748809

  5. [BZOJ1008][HNOI2008]越狱 组合数学

    http://www.lydsy.com/JudgeOnline/problem.php?id=1008 正着直接算有点难,我们考虑反着来,用全集减补集. 总的方案数为$m^n$.第一个人有$m$种可 ...

  6. 手机端左右滑动,不用写js(只有页面切换到移动端可以看)

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  7. select在数据库中有两种含义

    select在数据库中有两种意思 (1)是赋值的意思(2)是输出,打印的意思我想你问的大概是赋值吧print和 select在数据库中都有打印输出的意思 用法是:select @aa=select* ...

  8. [转] NTFS Permission issue with TAKEOWN & ICACLS

    (转自:NTFS Permission issue with TAKEOWN & ICACLS - SAUGATA   原文日期:2013.11.19) Most of us using TA ...

  9. Java锁,真的有这么复杂吗?

    为什么使用synchronizedvolatile,在多线程下可以保证变量的可见性,但是不能保证原子性,下面一段代码说明: 运行上面代码,会发现输出flag的值不是理想中10000,虽然volatil ...

  10. vue全选和取消全选

    代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...