通过动态结果集迭代

时间:2017-05-23 08:10:32

标签: java list hashmap iteration resultset

我的查询可以从表中返回动态列数。我需要遍历每一列并存储该特定列的所有行的数据并将它们存储在列表中。我需要对查询返回的所有列执行此操作。 同样,查询可以返回动态列。 实现上述方案的最佳方法是什么,代码复杂度最低。 例如:

------------------
Employee Table
------------------
Name | Age | Roll
------------------
A    | 21  | 1
------------------
B    | 22  | 2

我需要首先遍历Name列并将Name存储为键,将A和B存储为该映射的值,然后迭代Age列并将Age存储为键,将21,22存储为该键的值,依此类推。

我希望以最少的复杂性实现这一目标。

以下是我开发的代码:

rs = pstmt.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
int columnsNumber = rsmd.getColumnCount();

for (int j = 1; j <= columnsNumber; j++)
                {
                    String Colkey = rsmd.getColumnName(j);
                    List<String> colValueList = new ArrayList<String>();
                    while (rs.next())
                    {
                        colValueList.add(rs.getString(Colkey));


                    }

                    rs = pstmt.executeQuery();
                    map.put(Colkey,colValueList);
                }

提前谢谢。

2 个答案:

答案 0 :(得分:0)

这是实现此目的的一种方法:

rs = pstmt.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
int columnsNumber = rsmd.getColumnCount();

for (int j = 1; j <= columnsNumber; j++) {
    String Colkey = rsmd.getColumnName(j);
    map.put(Colkey, new ArrayList<String>());
}
while (rs.next()) {
    for (Map.Entry<String,List<String>> e: map.entrySet) {
        String Colkey = e.getKey();
        List<String> list = e.getValue();
        list.add(rs.getString(Colkey));
    }
}

答案 1 :(得分:0)

这很简单。 在存储到地图值时,请遵循POJO概念。 1.首先获取表逻辑结构并创建Pojo类,如下所示: -

    public class Employee {

    String name;
    int age;
    int roll;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getRoll() {
        return roll;
    }

    public void setRoll(int roll) {
        this.roll = roll;
    }
}

现在插入HashMap的逻辑。

rs = pstmt.executeQuery();
    HashMap map=new HashMap<String,Employee>();
    ResultSetMetaData rsmd = rs.getMetaData();
    int columnsNumber = rsmd.getColumnCount();

    for (int j = 1; j <= columnsNumber; j++)
                    {
                        String Colkey = rsmd.getColumnName(j);
                        List<String> colValueList = new ArrayList<String>();
                        while (rs.next())
                        {
                           Employee emp=new Employee();
                           emp.setAge(rs.getInt("AGE"));
                           emp.setAge(rs.getInt("ROLL"));
                           emp.setName(rs.getString("NAME"));
                         map.put(emp.getName(), emp);
                        }

                        rs = pstmt.executeQuery();
                  }