关于JDBC与Map的一个问题

J2EE 码拜 6年前 (2015-04-19) 675次浏览 0个评论
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


public class ParameterTest {

	public static void main(String[] args) throws SQLException {
		List datas=test("select *from test.worker where id <20");
		System.out.println(datas);
	}
	public static List  test(String sql) throws SQLException{
		Connection con =Util.getConnection();
		java.sql.PreparedStatement ps = con.prepareStatement(sql);
		ResultSet rs = ps.executeQuery();
		ResultSetMetaData rsmd = rs.getMetaData();
		int count =rsmd.getColumnCount();

		String[] colNames = new String [count];
		for(int i=1;i<=count;i++){
			colNames[i-1]=rsmd.getColumnName(i);
		}
		Map<String ,Object > data =new HashMap<>();

		List datas= new ArrayList();
		while(rs.next()){

			for(int i=0;i<colNames.length;i++){
				data.put(colNames[i], rs.getObject(colNames[i]));
				}

			datas.add("\n");
			datas.add(data);
		}

		return datas;

	}
}

如果这段代码:Map<String ,Object > data =new HashMap<>(); 放在While循环外部,输出的都是最后一条相同的内容
,即为:关于JDBC与Map的一个问题
如果放在While循环内部,则输出正常,
[
, {money=300, name=Mary, id=2}, 
, {money=410, name=tony, id=3}, 
, {money=3400, name=tomy, id=4}, 
, {money=2133, name=maike, id=8}, 
, {money=200, name=kim, id=9}, 
, {money=200, name=batch_name0, id=10}, 
, {money=201, name=batch_name1, id=11}, 
, {money=202, name=batch_name2, id=12}, 
, {money=203, name=batch_name3, id=13}, 
, {money=204, name=batch_name4, id=14}, 
, {money=205, name=batch_name5, id=15}, 
, {money=206, name=batch_name6, id=16}, 
, {money=207, name=batch_name7, id=17}, 
, {money=208, name=batch_name8, id=18}, 
, {money=209, name=batch_name9, id=19}]

本人愚笨,测试了很久但也不知道为什么,求指教。

关于JDBC与Map的一个问题
20分
map的key是唯一的,
放在外面(只生成一个map对象),一次一次覆盖了就剩最后一条了
关于JDBC与Map的一个问题
20分
很明显,你是想用Map对象去封装每一条结果,所以每一条结果应该对应一个新的Map,有几条记录就应该new几个Map对象去保存数据,最后再放到你的List容器里。
关于JDBC与Map的一个问题
放在外面,由于Map只New1次,所以Map只要一个引用,List中添加的自然是同一个引用。
这种问题你可以用Set测试一下。(去重)
关于JDBC与Map的一个问题
引用 1 楼 shixitong 的回复:

map的key是唯一的,
放在外面(只生成一个map对象),一次一次覆盖了就剩最后一条了

          看来要复习JavaSe的知识了,


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于JDBC与Map的一个问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!