如何创建动态arraylist并将arraylists放入hashmap?

时间:2015-11-17 17:51:53

标签: java jsp servlets

public HashMap viewTableData(String tabName)
   {
       ArrayList<String> arrayList = new ArrayList<String>(); 
       ArrayList<String> arrayList2 = new ArrayList<String>(); 
       ArrayList<String> arrayList3 = new ArrayList<String>(); 
       ArrayList<String> arrayList4 = new ArrayList<String>(); 
       HashMap discoverMap = new HashMap();

        try {

            con = DAOConnection.sqlconnection();
            stmt = con.createStatement();
            stmt = con.createStatement();
            query = "SELECT * FROM "+tabName;
            System.out.println("Qry executed");
            ps = con.prepareStatement(query);
            rs = ps.executeQuery(query);


            while(rs.next())
            {

                arrayList.add(rs.getString(i));
                arrayList2.add(rs.getString(2));
                arrayList3.add(rs.getString(3));
               arrayList4.add(rs.getString(4));


            }

            discoverMap.put("qrycol1", arrayList);
            discoverMap.put("qrycol2", arrayList2);
            discoverMap.put("qrycol3", arrayList3);
            discoverMap.put("qrycol4", arrayList4);

        } catch (SQLException ex) {
            Logger.getLogger(Query.class.getName()).log(Level.SEVERE, null, ex);

        }
        return discoverMap;
   }

每个表都有不同的列,那么如何将此代码用于动态sql表?(假设,我可以通过其他方法获取列值,列数可以从Information.Schema获取。) 假设,int值存储在int值i中。 如何使用循环并动态地工作?

2 个答案:

答案 0 :(得分:0)

参考您在评论中提到的循环问题。尝试这样的事情。希望它能回答你的问题。但是,如果您更详细地描述业务场景,那将会更有帮助。

Map discoverMap = new HashMap();
for(int i=1; i<=4; i++){
    List<String> list = new ArrayList<String>();
    list.add(rs.getString(i));
    discoverMap.put("querycol"+i,list);
} 

答案 1 :(得分:0)

不确定您正在寻找什么,但也许这个班级(ResultSetAdapter)可以提供帮助:

https://github.com/gk-brown/HTTP-RPC/blob/master/Server/Java/httprpc-server/src/org/httprpc/sql/ResultSetAdapter.java

它包装了一个JDBC ResultSet实例,使其看起来像List<Map<String, Object>>(换句话说,就是一个映射列表)。您可以像这样迭代它:

// Iterate over rows
for (Map<String, Object> row : new ResultSetAdapter(resultSet)) {
    // Iterate over columns within current row
    for (String column : row.keySet()) {
        System.out.println(column + " = " + row.get(column));
    }
}

这种方法的一个优点是您不需要将结果集中的值复制到新的列表或映射中 - 适配器类只是装饰结果集,使其看起来像一个映射列表。