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循环外部,输出的都是最后一条相同的内容 本人愚笨,测试了很久但也不知道为什么,求指教。 |
|
20分 |
|
20分 |
很明显,你是想用Map对象去封装每一条结果,所以每一条结果应该对应一个新的Map,有几条记录就应该new几个Map对象去保存数据,最后再放到你的List容器里。
|
放在外面,由于Map只New1次,所以Map只要一个引用,List中添加的自然是同一个引用。
这种问题你可以用Set测试一下。(去重) |
|
看来要复习JavaSe的知识了, |