mysqljson算法 數據結構 java
數據庫字段如圖
三個主鍵?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
???????????}
??????????
??????????]
……
}
回復內容:
將數據庫取出來的數據轉化成對象,然后用gson將對象直接轉化成json字符串!
你的SQL語句寫好了,只要一個對記錄集的大遍歷,在里面加兩個判斷處理就可以了。你不是說寫好了嗎?貼出來讓人修改。
另外,這個數量大是大到什么程度?你要是搞出來好幾M甚至幾十上百M的體積,光是傳輸也夠慢了。
你這里有個問題,就是里面銷售數據的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 ts;
}
class T {
String day;
int hour;
List 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;
- 第二步,循環List(T),根據day+hour,循環填充里面的store信息: select store, sales_count, profit, sales_value from T where day = ? and hour =?;
邏輯清晰,結構也不復雜,就兩層。