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. jmeter(十六)Jmeter之Bean shell使用(一)

    一.什么是Bean Shell BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法; BeanShell是一种松散类型的脚本语言(这点和JS类似); BeanS ...

  2. Kali linux 2016.2(Rolling)里的枚举服务

    前言 枚举是一类程序,它允许用户从一个网络中收集某一类的所有相关服务.

  3. javascript中闭包与作用域的理解

    很多js的框架与插件编写都用到了闭包,所以,阅读和掌握闭包很有必要.最近学习vue框架时,经常会猜想很多功能的native js实现,很多都应用到了闭包,闭包除了目前已知的一些特性,如:可以保持局部变 ...

  4. iOS 时间和时间戳之间转化

    以毫秒为整数值的时间戳转换 时间戳转化为时间NSDate - (NSString *)timeWithTimeIntervalString:(NSString *)timeString { // 格式 ...

  5. Win7 32位 遇到微软 silverlight 5.0安装失败的解决办法

    刚开始,也是尝试下载安装,多次都是到99%,提示安装失败! 也查找了很多网上朋友分享的办法,还是不行.重新建立一个管理员账号,还是不行. 后来反复不断的测试,找到原因了,安装99%不成功,但是卸载程序 ...

  6. Linux运维到底是做什么的?在开始学习之前,你必须了解这些!

    首先祝贺你选择学习Linux,你可能即将踏上Linux的工作之旅,出发之前,让我带你来看一看关于Linux和Linux运维的一切. Linux因其高效率.易于裁剪.应用广等优势,成为了当今中高端服务器 ...

  7. IO 双引号 输出 输入

    #! /usr/bin/perl use strict;use warnings; print "\n---------<STDIN>_store_into_an_array_a ...

  8. 雷林鹏分享:PHP Secure E-mails

    在上一节中的 PHP e-mail 脚本中,存在着一个漏洞. PHP E-mail 注入 首先,请看上一章中的 PHP 代码: if (isset($_REQUEST['email'])) { // ...

  9. 第2节 hive基本操作:11、hive当中的分桶表以及修改表删除表数据加载数据导出等

    分桶表 将数据按照指定的字段进行分成多个桶中去,说白了就是将数据按照字段进行划分,可以将数据按照字段划分到多个文件当中去 开启hive的桶表功能 set hive.enforce.bucketing= ...

  10. python pandas读写excel

    import pandas as pd import numpy as np df = pd.read_csv("result.csv") # csv # df = pd.read ...