当前位置: 代码迷 >> J2EE >> 关于JDBC与Map的一个有关问题,求教
  详细解决方案

关于JDBC与Map的一个有关问题,求教

热度:263   发布时间:2016-04-17 23:49:24.0
关于JDBC与Map的一个问题,求教
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循环外部,输出的都是最后一条相同的内容
,即为:
如果放在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}]

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

------解决方案--------------------
map的key是唯一的,
放在外面(只生成一个map对象),一次一次覆盖了就剩最后一条了
------解决方案--------------------
很明显,你是想用Map对象去封装每一条结果,所以每一条结果应该对应一个新的Map,有几条记录就应该new几个Map对象去保存数据,最后再放到你的List容器里。
  相关解决方案