2 回答
TA贡献1866条经验 获得超5个赞
您正在使用原始类型,而您的 IDE 或编译器正在向您发出大量关于此的警告。你应该注意他们。因为您没有,所以您能够编写代码,将包含映射的列表(每个映射代表一个返回的数据库结果,将列名映射到行中的值)...分配给类型为 的变量List<String>。
这种将 DB 行转换为地图的模型是一个坏主意。有很多不错的库可以与数据库交互。例如,JDBI易于理解,具有用于访问结果的更深思熟虑的 API。它甚至可以将结果映射到 java 数据类型。
如果您必须使用到目前为止粘贴的模型,对于初学者,请在各处添加泛型,以便编译器将其标记为编译时错误。至少做到这一点List<Map<String, Object>>。
让我重申一下,将事情切换到 JDBI 是一条非常优越的前进道路,但是为了回答直接提出的问题,一旦您添加了泛型并修复了您的变量类型,您可以这样做:
List<Map<String, Object>> data = getResultSet(syndicatorName);
for (int rowIdx = 0; rowIdx < data.size(); i++) {
Map<String, Object> row = data.get(rowIdx);
for (Map.Entry<String, Object> cell : row.entrySet()) {
System.out.printf("Row %d cell %s: %s\n", rowIdx, cell.getKey(), cell.getValue());
}
}
请注意,此处的单元格值为“对象”。您必须将它们转换为您知道的数据类型。这不是惯用的 java,但是如果不完全重新设计 getResultSet 方法,就无法解决这个问题。再次.. JDBI 或类似的库是您真正想要的。
TA贡献1797条经验 获得超4个赞
你需要一个嵌套的循环(至少我会那样做......不仅有其他几种方法):
for (HashMap<T,T> i : ArrayList<HashMap<T,T>>) {
for (T j : i.keySet()){
i.get(j);
//further code
}
}
添加回答
举报