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容器里。