【问题标题】:How to put arraylist into Hashmap in dynamic way?如何以动态方式将arraylist放入Hashmap?
【发布时间】:2016-02-20 05:15:00
【问题描述】:
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 {
            int i=1;
            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()){
              while(i<=4){ 
               arrayList.add(rs.getString(i));
               //arrayList2.add(rs.getString(2));
              discoverMap.put("qrycol"+i, arrayList);
              i++;
           }
           }
          // discoverMap.put("qrycol1", arrayList);
          // discoverMap.put("qrycol2",arrayList2);
           System.out.println("Map result:"+discoverMap);
        } catch (SQLException ex) {
            Logger.getLogger(Query.class.getName()).log(Level.SEVERE, null, ex);
            //return null;
        }
        return discoverMap;
   }

在这里你可以看到,我写了一个方法,它将从数据库表中获取值并放入 Hashmap。

如果我初始化 4 个不同的数组列表,并添加 rs.getString(1),rs.getString(2),... 那么它工作正常。但我想要一些动态功能,它会创建所需的数组列表并添加 rs.getString(i)。 但它正在运行但没有得到期望的输出。 这里 discoverMap 显示结果: Map result:{qrycol1=[1, Indranil, Banerjee, indranil1111@gmail.com], qrycol3=[1, Indranil, Banerjee,indranil1111@gmail.com], qrycol2=[1, Indranil, Banerjee, indranil1111@gmail.com], qrycol4=[1, Indranil, Banerjee, indranil1111@gmail.com]}

但是对于下面显示期望输出的代码:

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 {
            int i=1;
            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(1));
              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);
           System.out.println("Map result:"+discoverMap);
        } 

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

地图结果:{qrycol1=[1, 2, 3, 4, 6, 5, 7, 8], qrycol3=[Banerjee, JJJ, Saun, Gupta, efgh,aaaa, surname22, Sir], qrycol2=[ Indranil, pora, trao, Som, James, Anup, Abhi, Mia], qrycol4=[indranil111@gmail.com, pc@gmail.com, tit@gmail.com, so@gmail.com, ind@gmail.com, anu@gg.com, abhi@gg.com, mai@gg.com]}

这实际上是正确的。但我希望它是动态的。由于一直以来我们都无法假设需要多少个arraylist。 如果有人对此提供帮助,那将非常有帮助。提前致谢 。

数据库表结构:有4列,类型为varchar(但其他表可能不同,这就是我问这个问题的原因。)

【问题讨论】:

    标签: java jsp jakarta-ee servlets arraylist


    【解决方案1】:

    你需要知道从数据库返回的列数,如果你知道你可以关注:

            int numOfColumns = 6; // it can be any number you need
    
            // initialize the map
            for (int colIndex = 1; colIndex <= numOfColumns; ++colIndex) {
                String key = "qrycol" + colIndex;
                ArrayList<String> list = new ArrayList<>();
                discoverMap.put(key, list);
            }
    
            while (rs.next()) {
                // for each column got from DB, populate the corresponding array list
                for (int colIndex = 1; colIndex <= numOfColumns; ++colIndex) {
                    String key = "qrycol" + colIndex;
                    ArrayList<String> list = (ArrayList<String>) discoverMap.get(key);
                    list.add(rs.getString(colIndex));
                }
            }
    

    【讨论】:

    • 谢谢邦德。你帮了我很多。
    猜你喜欢
    • 2013-01-12
    • 2013-05-29
    • 2012-05-03
    • 2012-06-06
    • 2013-07-01
    • 2021-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多