我必须动态执行来自数据库的查询。查询具有动态字段,需要将其转换为映射作为键值对并发送到view.For ex 一个查询可能只返回一个字段,而另一个查询可能返回多行的两个以上字段。我必须编写代码,使其适用于n个字段并使用spring jdbc将其作为map返回。
答案 0 :(得分:3)
Spring提供了两种解决问题的方法。
方法1:使用JdbcTemplate类的queryForList方法。这将返回由列名填充的Map List作为键,DB记录作为值。你必须手动迭代列表。列表中的每个映射对象表示结果集中的单个行。 例如:
List<Map<String, Object>> result = jdbcTemplate.queryForList(query, new Object[]{123});
Iterator items = result.iterator();
while(items.hasNext()){
Map<String, Object> row = (Map<String, Object>) items.next();
System.out.println(row);
}
方法2:这不完全符合您的要求,但比第一种方法快一点,也涉及更多编码。你可以使用queryForRowSet方法。
SqlRowSet rowSet = jdbcTemplate.queryForRowSet(query, new Object[]{3576});
int columnCount = rowSet.getMetaData().getColumnCount();
System.out.println(columnCount);
while(rowSet.next()){
for(int id =1 ; id <= columnCount ; id ++){
System.out.println(rowSet.getString(id)) ;
// your custom logic goes here
}
}