查询中的空ResultSet

时间:2013-07-18 21:24:21

标签: java sql database spring jdbc

我正在尝试查询一个集合并将其作为带有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”用来获取所需的数据并在之后进行转换?

或者我错过了什么?

1 个答案:

答案 0 :(得分:3)

您不应该在rs.next()内调用mapRow。 JdbcTemplate会为结果集中的每一行调用mapRow

你需要在mapRow上做的只是返回一个表示一个数据库行的HashMap,spring将为你做结果集迭代