rs = DB.getResultSet(stm, "select * from userdata where MID=" + request.getParameter("MID"));
while(rs.next()) {
userArr.add(0, rs.getString("date"));
userArr.add(1, rs.getString("channel"));
userArr.add(2, rs.getString("province"));
userMap.put(rs.getInt("id"), userArr);
System.out.println(userArr.size());
}
我现在要将数据库里的数据按照代码的形式装到一个map里面,key是id,剩下的放到一个list里面装进value,
调代码的时候发现,这样是不可行的,每次循环后,userArr的值都会变,结果就变成,map里面所有的value都是
最后一条数据的value
这个问题应该怎么解决,总不能有几条数据就声明几个list吧?
------解决思路----------------------
好的,那代码就写成这样
while(rs.next()) {
userArr = new ArrayList<String>();//这句是新加的
userArr.add(0, rs.getString("date"));
在while循环外面初始化userArr,那么,while里面每次操作的都是堆中的同一个对象,当然剩下的是最后一个结果,象改过这样,每次会在堆中新建一个对象,供你操作,所以就可以把所有的数据依次保存下来了。
你需要查阅一下Java中的内存机制方面的教程,我水平不行,没办法在这里几句话说明白。
------解决思路----------------------
不能,因为你需要存在list的每个对象都是不同的,所以必须要每次都new一个对象,不然会出现你前面的结果。