0 0

求常用的数据设计(行列)的java代码5

问一个很实际的问题。
我先从数据库里面读出几条记录,eg:从数据库里面读出2009年1月份的数据。
mc   day         data
M1   2009-01-02   13
M1   2009-01-05   20
M2   2009-01-11   12
M4   2009-01-30   21
M5   2009-01-05   15

然后要在jsp页面中按照mc显示出这个月的每天的数据,并汇总。
要求如果是当前月的话显示到今天,如果月份比当前的月大的话,就没有数据显示。
AVG为sum by mc
Total为这一天所有mc的总和
mc要按照顺序排序。M1,M2,M3.......
2009-01-01 2009-01-02 2009-01-03 2009-01-04 2009-01-05 2009-01-06 .......AVG
M1 13                  20 1.06
M2
M4
M5                  15               
Total 13                  35           


不知道数据怎么存放好,要求效率要高。

谢谢,要有实现代码
问题补充:
页面显示有点问题。
是这样的。我从数据里面读到的数据为:
mc   day         data
M1   2009-01-02   13
M1   2009-01-05   20
M2   2009-01-11   12
M4   2009-01-30   21
M5   2009-01-05   15
然后我要把它在页面中显示出来。
表头:是这个月的所有的天数(2009-01-01,2009-01-02,...2009-01-31),最后放一个avg。
列为mc的列表+total信息。
就是显示每台mc在这个月的每天的data。
     01-01 01-02 01-03 01-04 01-05 01-06 ....... 01-31 AVG
M1     13    0     0     0     20    0             0   1.06--(13+20)/31
M2      0    0     0     0      0    0             0   0.39
M4      0    0     0     0      0    0             0   0.68
M5      0    0     0     0     15    0             0   0.48              
Total  13    0     0     0     35    0             0   2.61
问题补充:
谢谢zgy_zhengGY ,你的答复。
有一个对应的实体对象 封装所有字段 外加上字段 avg的, 

不知道你这个实体是怎么组织的?
要放到什么集合中?怎么放?

问题补充:
class Tab{
    private String mc;
    private String day;
    private int data;
    private double avg;
    //getter and setter method

然后:
List<Tab> tabList = new ArrayList<Tab>();
        Tab tab1 = new Tab();
        tab1.setMc("M1");
        tab1.setDay("2009-01-02");
        tab1.setData(13);
        tab1.setAvg(0.0);//不知道这个放什么值,暂时先放个0.0
        tabList.add(tab1);
        
        tab1 = new Tab();
        tab1.setMc("M1");
        tab1.setDay("2009-01-05");
        tab1.setData(20);
        tab1.setAvg(0.0);
        tabList.add(tab1);
        
        tab1 = new Tab();
        tab1.setMc("M2");
        tab1.setDay("2009-01-11");
        tab1.setData(12);
        tab1.setAvg(0.0);
        tabList.add(tab1);
        
        tab1 = new Tab();
        tab1.setMc("M4");
        tab1.setDay("2009-01-30");
        tab1.setData(21);
        tab1.setAvg(0.0);
        tabList.add(tab1);
        
        tab1 = new Tab();
        tab1.setMc("M5");
        tab1.setDay("2009-01-05");
        tab1.setData(15);
        tab1.setAvg(0.0);
        tabList.add(tab1);

然后在页面中怎么显示呢?
     01-01 01-02 01-03 01-04 01-05 01-06 ....... 01-31 AVG
M1     13    0
M1     20    0
M2     12    0
M4     21    0
M5     15    0         
这样不行吧
问题补充:
真是太感谢了。我看明白了。
但是有几个地方你没注意:
1,我从数据库里面读出来的天数,并不一定每天都有,比如说只有1号的数据,但是也要在页面中显示出31天的数据。
2,我从数据库里面读出来的可以一个mc有几条记录。但是要显示在一行。

你写的标签中少了点东西:
 <table>  
                    <!-- 遍历实体tab -->  
                    <s:iterator id="tab" value="tabList">  
                    <tr>  
                        <td>${tab.mc}</td>  
                        <td>${tab.data}</td>  
                        <td>${tab.avg}</td>  
                    </tr>  
                    </s:iterator>  
            </table>  


问题补充:
可是离我要的结果还有很远。

还有很多的地方要处理,你说的那个最平常的做法。这里要做数据的处理,你没有说怎么处理的。而这中是我要问的。
问题补充:
谢谢。对,是写死的,还要考虑到月份的问题。
我写过,用到2层hashmap,用了很多的代码,感觉效率不是很高。

请教有什么好的方法吗?
问题补充:
好,你只解决了一个问题,还有一个:

2,我从数据库里面读出来的可以一个mc有几条记录。但是要显示在一行。

还有就是avg和total怎么来处理呢
问题补充:
可以用数据库来处理,但是现在的问题,你不是dba,只能去读数据库,而且数据量很大,不能给数据库带来负担。
只能用code来处理
2009年10月13日 18:49

1个答案 按时间排序 按投票排序

0 0

这个问题规定只能用JAVA来做吗?

我觉得这个问题用存储过程的话会更快,代码也比较清晰。
所有的逻辑方存储过程里,java掉用一下存储过程就可以了。
下面的SQL语句写的不完全,大概表达一下我的意思。
可以在存储过程里对根据不同的月份加工一下。

SELECT mc,
sum(case to_char(day,'DD') when '01' then data else 0 end) as day1,
sum(case to_char(day,'DD') when '02' then data else 0 end) as day2,
sum(case to_char(day,'DD') when '03' then data else 0 end) as day03,
sum(case to_char(day,'DD') when '04' then data else 0 end) as day04,
sum(case to_char(day,'DD') when '05' then data else 0 end) as day05,
sum(case to_char(day,'DD') when '06' then data else 0 end) as day06,
sum(case to_char(day,'DD') when '07' then data else 0 end) as day07,
sum(case to_char(day,'DD') when '08' then data else 0 end) as day08,
sum(case to_char(day,'DD') when '09' then data else 0 end) as day09,
sum(case to_char(day,'DD') when '10' then data else 0 end) as day10,
AVG(data)
FROM XIAOYAO
GROUP BY mc

运行结果:
M1 0 13 0 0 20 0 0 0 0 0 16.5
M2 0 0 0 0 0 0 0 0 0 0 12
M4 0 0 0 0 0 0 0 0 0 0 21
M5 0 0 0 0 21 0 0 0 0 0 21

2009年10月14日 16:02

相关推荐

    java 实现求行列式的值

    总结来说,利用Java实现高斯消元法求行列式的值,需要理解矩阵和行列式的概念,掌握高斯消元的步骤,并能将其转化为编程逻辑。通过创建自定义的`Matrix`类和相关方法,我们可以方便地进行矩阵操作,并计算出其行列式...

    1.(地图数据篇)天地图瓦片数据爬取--java代码.zip

    【标题】:“1.(地图数据篇)天地图瓦片数据爬取--java代码.zip” 涉及的知识点主要集中在地图数据的获取以及Java编程技术上,特别是网络爬虫在处理地图瓦片数据时的应用。 【地图瓦片数据】: 地图瓦片是一种将...

    14.(地图数据篇)arcgis地图瓦片数据爬取--java代码.zip

    Java代码爬取ArcGIS地图瓦片涉及以下几个核心概念和技术: 1. **网络请求**:你需要发送HTTP或HTTPS请求到ArcGIS服务器获取特定瓦片。这通常使用`java.net.URL`类或第三方库如Apache HttpClient或OkHttp来实现。 2...

    JAVA编写n阶行列式求值程序

    根据给定文件的信息,本文将详细介绍如何使用Java编程语言实现一个计算任意阶数行列...同时,本程序也展示了Java语言处理复杂数据结构的能力,以及如何通过类和方法的设计来组织代码结构,提高程序的可读性和可维护性。

    读取csv文件中指定行列的数据

    本教程将深入探讨如何使用Java在Eclipse集成开发环境中读取CSV文件中的指定行和列数据。 首先,我们需要了解CSV文件的基本结构。CSV文件是以逗号分隔的文本文件,每行代表一个记录,每个记录的字段由逗号分隔。例如...

    数据结构 用Java语言实现矩阵 可视代码

    以上代码实现了基本的矩阵操作,但实际应用中可能需要更多高级功能,如转置、求逆、求行列式等。在设计类时,可以考虑使用面向对象的原则,将矩阵封装为一个类,包含必要的属性(如行数、列数和元素)以及相关的操作...

    java行转列的例子

    当我们从数据库中获取数据,有时会遇到单个字段的数据需要在用户界面上以列的形式展示,这时就需要进行数据的行列转换。 在Java中实现行转列,通常涉及数据结构的转换,如从List&lt;List&lt;String&gt;&gt;转换为List,或者更...

    剑指offer编程题66道题目描述及java代码实现汇总

    这里的"剑指offer编程题66道题目描述及java代码实现汇总"是一个集合,包含了书中66个编程挑战的详细描述以及对应的Java代码实现。以下是对这些编程题目的部分解析和相关知识点的详细阐述: 1. **数组中出现次数超过...

    java常用数值算法

    这些算法包括矩阵乘法、求逆、特征值、行列式计算等,对于图像处理、机器学习等领域尤为重要。 2. **数值求解**:解决线性和非线性方程组是数值算法的重要部分。例如,高斯消元法、雅可比迭代法和Gauss-Seidel迭代...

    Java常用数值算法集

    在"Java常用数值算法集"中,可能包含有以上各个领域的具体Java代码实现,通过阅读和学习这些代码,开发者可以更好地理解和运用数值算法,解决实际问题。同时,这个集合可能也包括了示例、测试和相关的文档,帮助...

    基于小程序的公考学习平台的设计与实现源代码(java+小程序+mysql+LW).zip

    本文将详细介绍一个集成了Java语言、小程序技术、MySQL数据库的公考学习平台的设计与实现,并提供系统的源代码。 首先,从技术选型来看,该平台采用Java语言进行开发,Java以其跨平台、面向对象、稳定性和安全性等...

    银行管理系统课程设计 java

    根据给定的信息,我们可以分析出这是一份关于Java编程实现的银行管理系统的课程设计案例。这份案例主要涉及了用户界面的设计以及基本的增删改查功能。下面将详细阐述其中的关键知识点。 ### 1. Java Swing 用户界面...

    Java数值计算算法源代码

    Java中处理矩阵的算法可能包括矩阵的加法、减法、乘法(包括矩阵乘法和点乘)、转置、求逆、求行列式以及特征值等。这些操作可能基于高效的算法如Strassen分治法或Coppersmith-Winograd算法。 3. **线性方程求解**...

    java实现的矩阵转换算法—适合java入门

    Java代码实现时,可以创建一个新的二维数组C,并用双重循环来计算每个元素。 3. **矩阵转置**: 转置是将矩阵的行变成列,列变成行。给定矩阵A(m×n),其转置矩阵AT(n×m)的元素a'[i][j]等于原矩阵的a[j][i]。...

    java后台html 转excel

    在Java后台处理HTML数据并转换成Excel文件是一个常见的需求,特别是在数据分析、报表生成或导出功能中。这个技术涉及到HTML解析、数据提取以及Excel文件的生成。以下将详细讲解这个过程涉及的关键知识点。 1. HTML...

    DBF表数据行列转换

    DBF表数据行列转换是数据库管理中常见的操作,特别是在处理早期的桌面数据库系统,如FoxPro、dBASE等,这些系统广泛使用DBF文件格式存储数据。DBF(dBASE File)是一种简单但功能强大的表格文件格式,由一系列记录...

    java绝对生成excel报表

    在Java编程环境中,生成Excel报表是一项常见的任务,尤其在数据处理和数据分析领域。"java绝对生成excel报表"这个标题暗示了我们可以通过Java实现对Excel文件的创建和操作,确保能够生成精确的表格形式的数据报告。...

    30天学通Java项目案例开发 源代码

    JUnit是Java常用的单元测试框架,通过编写测试用例,可以确保代码功能的正确性。源代码中可能包含测试类和测试方法,帮助开发者调试和验证代码。 第七,源代码还可能包含设计模式的应用,如单例模式、工厂模式、...

    一道java面试题 行列转换

    本篇文章将通过一个具体的Java面试题目,详细介绍如何在Oracle和SQL Server两种数据库环境下实现行列转换,并给出具体的示例代码。 #### 二、需求分析与设计 假设我们有一个成绩表`sc`,表结构如下: - `sid`: ...

    JAVA 操作Excel导入 核心代码

    1. **基本行列表格模式**:系统应能动态生成包含数据项(如姓名、性别、住址等)的表格,以供用户直观输入。 2. **含有下拉列表的输入模式**:对于有固定选项的数据(如民族、政治面貌),需要动态生成下拉列表,以...

Global site tag (gtag.js) - Google Analytics