数据库字段如图
三个主键 day,hour,store ,就是按要可以查出某天的某小时的某个店铺的具体销售情况,
day,hour,store的数据可重复,但三个字段组成的数据是唯一的。
要求用java mysql jdbc(其它数据库连接技术也可以)但语言必须是java。
如何读取数据库组成下面这种格式的json
我自己用jdbc然后多层while循环可以组成这种格式,但是非常低效。数据量一大就很慢很慢了
求高效的解决办法
多层嵌套格式
{
2016-07-16:
{
1:
[
nike:{
sales_count:1000
profit:200
sales_value:10000
}
adidas:
{
sales_count:1001
profit:201
sales_value:10001
}
]
2:
[
nike:{
sales_count:1002
profit:203
sales_value:10004
}
adidas:
{
sales_count:1005
profit:206
sales_value:10007
}
]
......
2016-07-17:
{
1:
[
nike:{
sales_count:1008
profit:208
sales_value:10008
}
adidas:
{
sales_count:1009
profit:209
sales_value:10009
}
]
2:
[
nike:{
sales_count:2002
profit:204
sales_value:20004
}
adidas:
{
sales_count:1505
profit:216
sales_value:10077
}
]
......
}
创建一个对象,按照你的json规则来做对象嵌套,例如:
public class TableA{
public string Day{get;set;}
public List TableBs{get;set;}
}
public class TableB{
public TableC Adidas{get;set;}
}
public class TableC{
public int SaleCount{get;set;}
}
然后序列化为json就可以了,你要做的是研究明白对于你要的json他的对象是怎么嵌套的;
//json序列化百度,对象赋值百度
你效率慢,不一定出在组装上,更可能是出在SQL语句的编写上。那它发出来。
你这里有个问题,就是里面销售数据的key是店名,也就是不固定的,所以实现会非常复杂。
建议你稍微改造一下,复杂度会降低很多,里面的子数组格式改为:
[
{
store: nike
sales_count:2002
profit:204
sales_value:20004
},
{
sales_count:1505
profit:216
sales_value:10077
},
...
]
那么可以这么设计JavaBean接收数据,然后使用工具Object转jsonString.
class Result {
List(T) ts;
}
class T {
String day;
int hour;
List(Store) stores;
}
class Store {
String store;
int sales_count;
int profit;
int sales_value;
}
尖括号不支持,用小括号代替了。。
sql查询的话,建议不要用大sql,因为子查询太多,太多子查询会指数级减慢大sql效率,用java循环执行简单SQL。
1。 第一步,查询第一层的基本数据,得到List(T):
select distinct day, hour from Table;
逻辑清晰,结构也不复杂,就两层。
这是干啥用的。没比较消耗这么大查询量的就别消耗这么多资源,可以用二次加载,异步加载避免大范围查询数据,毕竟不是一下子就能看完的。查询数据起码应该上表结构。要不查啥。或者你就按照这个数据格式存起来,每次有变动就更改这项。