Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将具有扁平列结构的结果集转换为分层数据结构_Java_Database_Data Structures - Fatal编程技术网

Java 将具有扁平列结构的结果集转换为分层数据结构

Java 将具有扁平列结构的结果集转换为分层数据结构,java,database,data-structures,Java,Database,Data Structures,我在java.sql.ResultSet中有一个db查询的结果,需要转换为分层数据结构。看起来有点像这样: name|version|pname|code|count n1|1.1|p1|c1|3 n1|1.1|p1|c2|2 n1|1.1|p2|c1|1 n1|1.2|p1|c1|0 n2|1.0|p1|c1|5 我需要将其转换为分层数据结构: N1 + 1.1 + p1 + c1(3) + c2(2) + p2 + c1(1) + 1.2

我在
java.sql.ResultSet
中有一个db查询的结果,需要转换为分层数据结构。看起来有点像这样:

name|version|pname|code|count
n1|1.1|p1|c1|3
n1|1.1|p1|c2|2
n1|1.1|p2|c1|1
n1|1.2|p1|c1|0
n2|1.0|p1|c1|5
我需要将其转换为分层数据结构:

N1
 + 1.1
   + p1
     + c1(3)
     + c2(2)
   + p2
     + c1(1)
 + 1.2
    + p1
      + c1(0)
N2
 + 1.0
   + p1
     + c1(5)
所以我的数据结构可以是这样的

Name {
  String name
  List<Version> versions
}

Version {
  String version
  List<PName> pnames
}

PName {
  String pName
  List<CodeCount> codeCounts
}

CodeCount {
  String code
  Integer count
}
名称{
字符串名
列出版本
}
版本{
字符串版本
列表pnames
}
PName{
字符串pName
列出编码计数
}
编码计数{
字符串代码
整数计数
}

有没有人对最好的方法有什么建议/代码片段?

有几种方法,如何做到这一点取决于解决方案的健壮性

一种方法是只编写两个在数据库中具有属性的对象。然后,您可以获得结果集,并对其进行迭代,每次键字段(例如,“name”)更改时创建一个新对象,并将其添加到该对象的列表中。然后适当地设置属性。这就是“快速而肮脏”的解决方案

一种稍微更健壮的方法是使用Hibernate之类的东西来进行映射


如果您决定这样做,我还建议您重做您的表,以便它们准确地反映您的对象结构。如果您只是想要一个快速的解决方案,那么可能不需要它。但是,如果您正在为商业或企业软件寻找一个健壮的解决方案,这可能是一个好主意。

我还需要将这些数据以XML的形式流式输出,这可能会产生大量数据,这样我就不想将这些数据存储在内存中,在编写XML时进行某种惰性迭代。