如何从ResultSet构建此Java集合

时间:2012-03-16 17:28:43

标签: java collections multimap

我有来自ResultSet的数据,其中包含三个字段:DataType,Data,DataValue。我想构建一个Java Collection,然后构建JSON编码。

这是我尝试打印时的输出:

System.out.println(resultSet.getString("DATATYPE") + " --> " + resultSet.getString("DATA") + " --> " + resultSet.getString("DATAVALUE"));

输出:

Address --> Test --> JHGJHGJKG
Address --> City--> Some city
Address --> State --> Some state
Address --> Downtown --> Some downtown
Address --> Telephone --> 547455654
Address --> Street  --> Some street
Customer Information --> Downtown --> some other downtown
Customer Information --> Job --> Programmer
Customer Information --> Identification card --> ID32443
Customer Information --> ZIP Code --> 74584
Customer Information --> Kind of person --> Regular
Customer Information --> Birthday --> 10 01 1980
Customer Information --> Telephone --> 99832498
Other --> Last visit --> 10 01 1980

我尝试使用这样的Guava Google Collections:

Map<String, String> data = new HashMap<String,String>();
HashMultimap<String, Map> multiMap = HashMultimap.<String, Map> create();
...
//iterating the resultSet
..

data.put(resultSet.getString("DATA"), resultSet.getString("DATAVALUE"));
multiMap.put(resultSet.getString("DATATYPE"), data);
..
// resultSet ends

生成的Collection / Multimap将是:

{
  [
    Address = {
      Test = somevalue,
      City = SomeCity,
      ...
    },
    Customer Information={
      Job = programer,
      Identificationcard = ID34234,
      ...
    },
    Other{
      Lastvisit = 10-02-1990
    }
  ]
}

我已经尝试过,但没有成功的结果。

ResultSet的所有结果都是动态,动态类型,数据和值。我不能使用定义类,例如对于地址数据,根据输入数据无法显示。

2 个答案:

答案 0 :(得分:1)

您需要创建表示数据的类。您可以AddressCustomerInformation等等 - 然后您可以创建一个包装类,例如代表所有内容的CustomerAddressCustomerInformation)。 当您从数据库中读取记录时,您可以填充AddressCustomerInformation的新对象并填充您的Customer对象,并将其提供给集合。

然后,您可以创建一个实用程序类,它将遍历此值对象集合中的每个元素,并将其转换为适当的JSAON表示法。

答案 1 :(得分:1)

您可以拥有这样的通用域对象:

Dataobject {

   dataType;
   data;
   dataValue;

   Set<Dataobject>descendents;

}

这会给你无尽的链接深度。

在迭代结果集时,您可以决定是要在相同级别创建它们还是增加深度。

完成所有操作后,使用XStream()将其编组为xml字符串。