我有来自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的所有结果都是动态,动态类型,数据和值。我不能使用定义类,例如对于地址数据,根据输入数据无法显示。
答案 0 :(得分:1)
您需要创建表示数据的类。您可以Address
,CustomerInformation
等等 - 然后您可以创建一个包装类,例如代表所有内容的Customer
(Address
,CustomerInformation
)。
当您从数据库中读取记录时,您可以填充Address
和CustomerInformation
的新对象并填充您的Customer
对象,并将其提供给集合。
然后,您可以创建一个实用程序类,它将遍历此值对象集合中的每个元素,并将其转换为适当的JSAON表示法。
答案 1 :(得分:1)
您可以拥有这样的通用域对象:
Dataobject {
dataType;
data;
dataValue;
Set<Dataobject>descendents;
}
这会给你无尽的链接深度。
在迭代结果集时,您可以决定是要在相同级别创建它们还是增加深度。
完成所有操作后,使用XStream()将其编组为xml字符串。