日期:2014-05-20  浏览次数:20740 次

jdbc查询多条记录问题
因为好久不用jdbc,今天突然用到jdbc查询表中数据,发现这样一个问题。
具体看代码。

String findSql = "SELECT ID,TITLE,IMGPATH,VIDEOPATH,UPLOADTIME,UPLOADUSER FROM TEST_VIDEO ";
List<Map> lists = new ArrayList<Map>();//存放map的list
Map map = new HashMap();//存放数据的map
try{
 con = DBConnection.getConnection();
 ps = con.prepareStatement(findSql);
 rs = ps.executeQuery();

while(rs.next()){

map.put("ID", rs.getInt("id"));
map.put("TITLE", rs.getString("title"));
map.put("IMGPATH",rs.getString("imgpath"));
map.put("VIDEOPATH",rs.getString("videopath"));
map.put("UPLOADTIME",rs.getString("uploadtime"));
map.put("UPLOADUSER", rs.getString("uploaduser"));
lists.add(map);
System.out.println(lists);
}

}catch(Exception e){
e.printStackTrace();
}finally{

}
return lists;
}

这是打印的list结果


上面在查询的时候发现查询出的结果都是最后一条记录,突然想起map中不能有重复键。。。
这样每次都会是同一条记录。。
因为我返回List 用jstl 直接在jsp页面遍历 所以不知道怎么好了。希望有哥哥能帮帮小妹。

------解决方案--------------------
把Map map = new HashMap();//存放数据的map 
放在while循环体里!
------解决方案--------------------
没人吗没人吗
------解决方案--------------------


2楼正解
------解决方案--------------------
引用:
把Map map = new HashMap();//存放数据的map 
放在while循环体里!
的确。。。粗心了
------解决方案--------------------
java只有值传递
 Map map = new HashMap();//存放数据的map
list.add(map) list里面存放的是map对应的地址

在这步
map.put("ID", rs.getInt("id"));
                map.put("TITLE", rs.getString("title"));
                map.put("IMGPATH",rs.getString("imgpath"));
                map.put("VIDEOPATH",rs.getString("videopath"));
                map.put("UPLOADTIME",rs.getString("uploadtime"));
                map.put("UPLOADUSER", rs.getString("uploaduser"));
你只是改变了map的内容,未改变map的地址。但是从来也就只有一个map
所有到最后添加到list中的map其实都是一样的

把Map map = new HashMap();放到while循环中,相当于每次遍历的时候都生成了一个新的HashMap,自然也就不同了。
------解决方案--------------------
  貌似比我厉害。  求指导。 Q 215492215     3Q
------解决方案--------------------
null