2010年12月6日 星期一

Exception:org.springframework.dao.IncorrectResultSizeDataAccessException: Incorrect result size: expected 1, actual 4

在spring下,db使用queryForMap時,出現的錯誤。


原因:select salary from user where 1 = 2 的結果是 salary (返回第0行),會抛出IncorrectResultSizeDataAccessException。


所以最好還是用queryForList, 返回的list的size為0,表示找不到資料。除非確定資料select出來一定至少有一筆,才使用queryForMap。

原始程式:


    public Map queryForMap(String sql) throws DataAccessException {
        return (Map) queryForObject(sql, getColumnMapRowMapper());
    }
--------------------------------------------------------------------------------------------------------
    public Object queryForObject(String sql, Object[] args, int[] argTypes, RowMapper rowMapper) throws DataAccessException {
        List results = (List) query(sql, args, argTypes, new RowMapperResultSetExtractor(rowMapper, 1));
        return DataAccessUtils.requiredUniqueResult(results);
    }
    public Object queryForObject(String sql, Object[] args, RowMapper rowMapper) throws DataAccessException {
        List results = (List) query(sql, args, new RowMapperResultSetExtractor(rowMapper, 1));
        return DataAccessUtils.requiredUniqueResult(results);
    }
    public Object queryForObject(String sql, RowMapper rowMapper) throws DataAccessException {
        List results = query(sql, rowMapper);
        return DataAccessUtils.requiredUniqueResult(results);
    }
--------------------------------------------------------------------------------------------------------
    public static Object requiredUniqueResult(Collection results) throws IncorrectResultSizeDataAccessException {
        int size = (results != null ? results.size() : 0);
        if (size == 0) {
            throw new EmptyResultDataAccessException(1);
        }
        if (!CollectionUtils.hasUniqueObject(results)) {
            throw new IncorrectResultSizeDataAccessException(1, size); //問題在這裡
        }
        return results.iterator().next();
    }

沒有留言:

<%-- = = = = = = = = = = = = = = = = = 以上 = = = = = = = = = = = = = = = = = --%>

高雄聚會餐館

ボードゲーム予定

ボードゲーム持っている

<%-- = = = = = = = = = = = = = = = = 以下空白 = = = = = = = = = = = = = = = = --%>