ResultSet rs = stmt.executeQuery("select * from " + tableName);
        List<ImsData> dataList = new ArrayList<ImsData>();
        ImsData imsData = new ImsData();
        while(rs.next()){          
            imsData.setBenchmarkCmName(rs.getString(1));
            imsData.setMeasureCmName(rs.getString(2));
            dataList.add(imsData);
        }

下面代码为正确

ResultSet rs = stmt.executeQuery("select * from " + tableName);
        List<ImsData> imsDataList = new ArrayList<ImsData>();
        while(rs.next()){
            ImsData imsData = new ImsData();
            imsData.setBenchmarkCmName(rs.getString(1));
            imsData.setMeasureCmName(rs.getString(2));
            imsDataList.add(imsData);
        }

只有第二段代码中的imsDataList才是完整的list,第一段代码imsDataList的list最终都是最后imsData的值,当时list中
的size都是正常。
在输出时发现输出的数据都是最后一条,前面的数据完全被覆盖,
解决这个问题很简单就是把ImsData imsData = new ImsData();这一句代码放进while循环内.
为什么会出现这样的情况呢?原因在于ArrayList的add()方法添加的是对象的引用,
如果上述一行代码在while循环外面,那么创建的对象引用始终只有一个,
而while循环内一直在改变对象的各个变量,直至while循环结束,而添加进入users的引用始终是不变。