我正在尝试查询一个集合并将其作为带有Spring JdbcTemplate的哈希映射对象返回。但是有些原因我从服务器上得到了空的结果集。我可能在整体配置中遇到问题,但其余查询都没有问题。
这是我查询的方式
public Map<Integer, String> getCompanyDataservers() {
return getTemplate().queryForObject("select id, dataserver from company", new RowMapper<Map<Integer,String>>() {
@Override
public Map<Integer, String> mapRow(ResultSet rs, int rowNum)
throws SQLException {
HashMap<Integer, String> toReturn = new HashMap<Integer, String>();
while(rs.next()) {
int id = rs.getInt("id");
toReturn.put(id, dataserver);
}
return toReturn;
}});
}
在一些调试和日志记录语句之后,我得出结论,我的结果集似乎没有任何行。当我直接从DB手动查询相同的(“select id,dataserver from company”)时,我得到了所需的结果。但是这样我得到一个0行的结果集。
我的一个理论是,在以这种方式查询对象时无法获得这种设置。但是,有没有可能在你的查询中自由,并构建一个更复杂的对象作为查询结果,或者我必须创建一个专用的类,由“queryForList”用来获取所需的数据并在之后进行转换?
或者我错过了什么?
答案 0 :(得分:3)
您不应该在rs.next()
内调用mapRow
。 JdbcTemplate会为结果集中的每一行调用mapRow
你需要在mapRow
上做的只是返回一个表示一个数据库行的HashMap,spring将为你做结果集迭代