【问题标题】:HashMap overridden by last valueHashMap 被最后一个值覆盖
【发布时间】:2013-10-03 13:50:34
【问题描述】:
Statement selectStatement = connection.createStatement();
        ResultSet selectResultSet = selectStatement.executeQuery(query);
        logger.info("sql query " + selectStatement.toString());
        ResultSetMetaData rsmd = selectResultSet.getMetaData();
        int columnsNumber = rsmd.getColumnCount();
        String[] row = new String[columnsNumber];

        int ctr = 0;
        logger.info("Reading from database...");
        while(selectResultSet.next())
        {
            for(int i=0;i<columnsNumber;i++){
                row[i] = selectResultSet.getString(i+1);
            }
            System.out.println();
            dataFromQuery.put(ctr++, row);
        }
        selectResultSet.close();

从 HashMap 回读时,它只打印最后一行 'n' 次。

【问题讨论】:

    标签: java arrays collections hashmap


    【解决方案1】:

    您缺少的是 - row = new String[columnsNumber]; 在 while 循环中,这实际上会导致重写数组对象值,并且您将相同的对象添加到 HashMap

    ...
    while(selectResultSet.next()){
         row = new String[columnsNumber];
         for(int i=0;i<columnsNumber;i++){
             row[i] = selectResultSet.getString(i+1);
         }
         System.out.println();
         dataFromQuery.put(ctr++, row);
    }
    ...
    

    【讨论】:

      【解决方案2】:

      在while循环中声明行数组,以便每一行都有自己的副本,目前map中的每一行都引用了被最后一个循环覆盖的同一个行数组。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-04-22
        • 1970-01-01
        • 2014-09-06
        • 2021-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多