如何从JDBC结果集中获取行值数组

时间:2012-05-23 21:59:38

标签: arrays jdbc

我有一个sql语句,它会带回以下行:

enter image description here

我想从JDBC结果集中获取这些值作为两个对象。一个用于customerNo 1的客户,另一个用于客户2.我希望这两个对象具有另一个数组值以及相关的标题和对象值。

结构最终看起来像这样(在JSON中):

{customerNo:1,[“对象1”,“对象2”,“对象3”]},{customerNo:2,[“对象4”,“对象5”]}

如何使用JDBC实现此目的?

2 个答案:

答案 0 :(得分:2)

您可以使用地图以最初的格式收集所需的格式。

Map<Integer, Set<String>> customerTitles = new HashMap<Integer, Set<String>>();
while(resultSet.next()) {
    Integer custId = resultSet.getInt(1);
    Set<String> titles = customerTitles.containsKey(custId) ? 
            customerTitles.get(custId) : new HashSet<String>();
    titles.add(resultSet.getString(2));
    customerTitles.put(custId, titles);
}

一旦你以这种方式收集它,你可以迭代Map,然后在其中迭代并将它们转换为JSON

// Convert to Json array here using your JSON library
for(Integer custId :  customerTitles.keySet()) {
    for(String title : customerTitles.get(custId)) {

    }
}

答案 1 :(得分:0)

我能想到两种方式。

  1. 首先使用CustomerNo查询获取SELECT DISTINCT并将其保存在COLLECTION中。 然后,CustomerNo中的每个{使用循环} COLLECTION执行SELECT Title from table WHERE CustomerNo = <collectionValue>,并为每个JSON Object创建一个新的CustomerNo

  2. 使用RESULTSET获取SELECT CustomerNo, Title FROM tablename ORDER BY CustomerNo。 在RESULTSET的提取代码(循环内)中,将变量分配给CustomerNo RESULTSET,并检查下一行。如果您遇到新的CustomerNo,请创建新的JSON Object