当前位置: 代码迷 >> J2SE >> 请大家帮忙看看这个数据库集合的有关问题
  详细解决方案

请大家帮忙看看这个数据库集合的有关问题

热度:127   发布时间:2016-04-23 19:51:26.0
请大家帮忙看看这个数据库集合的问题
				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中的内存机制方面的教程,我水平不行,没办法在这里几句话说明白。
------解决思路----------------------
引用:
Quote: 引用:

好的,那代码就写成这样

while(rs.next()) {
    userArr = new ArrayList<String>();//这句是新加的
    userArr.add(0, rs.getString("date"));

在while循环外面初始化userArr,那么,while里面每次操作的都是堆中的同一个对象,当然剩下的是最后一个结果,象改过这样,每次会在堆中新建一个对象,供你操作,所以就可以把所有的数据依次保存下来了。
你需要查阅一下Java中的内存机制方面的教程,我水平不行,没办法在这里几句话说明白。

我懂你的意思了,有没有更好的方法,这样的话数据很多的情况下每一条都要new一个对象效率会很低的吧


不能,因为你需要存在list的每个对象都是不同的,所以必须要每次都new一个对象,不然会出现你前面的结果。
  相关解决方案