是从数据库中查出记录,然后存到一个HashMap组成的List中,数据库字段是不可能重复的,但是通过断点跟踪发现,某些前面取出的键被覆盖了,代码如下:
public static List executeQuery(String sql) throws Exception {
System.out.println(sql);
List rsall = new ArrayList();
Connection con = connectToDb();
Statement stmt = null;
ResultSet rs = null;
Map rsTree;
try {
stmt = con.createStatement();
rs = stmt.executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();
int numberOfColumns = rsmd.getColumnCount();
while (rs.next()) {
rsTree = new HashMap(numberOfColumns);
for (int r = 1; r < numberOfColumns + 1; r++) {
rsTree.put(rsmd.getColumnName(r).toLowerCase(), rs.getObject(r)); }
rsall.add(rsTree);
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
try {
rs.close();
stmt.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return rsall; }
public static List executeQuery(String sql) throws Exception {
System.out.println(sql);
List rsall = new ArrayList();
Connection con = connectToDb();
Statement stmt = null;
ResultSet rs = null;
Map rsTree;
try {
stmt = con.createStatement();
rs = stmt.executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();
int numberOfColumns = rsmd.getColumnCount();
while (rs.next()) {
rsTree = new HashMap(numberOfColumns);
for (int r = 1; r < numberOfColumns + 1; r++) {
rsTree.put(rsmd.getColumnName(r).toLowerCase(), rs.getObject(r)); }
rsall.add(rsTree);
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
try {
rs.close();
stmt.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return rsall; }
rsTree = new HashMap(numberOfColumns);
for (int r = 1; r < numberOfColumns + 1; r++) {
rsTree.put(rsmd.getColumnName(r).toLowerCase(), rs.getObject(r)); }
rsall.add(rsTree);
}
lz每次循环的时候rsTree = new HashMap(numberOfColumns);new了一个新的hashMap,等你循环出来肯定没有前面的数据啦!
size等于7,但table只有5项有内容,跟踪发现,前面的某些项被覆盖了
“如果列名相同的话肯定会被覆盖了阿”
列名是不同的,而且这个函数原来使用没有问题,今天突然发现有些列取不到数据
你的sql语句是什么啊?