首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

spring JdbcTemplate的queryForObject为空返回错误情况的一个处理

2012-10-06 
spring JdbcTemplate的queryForObject为空返回异常情况的一个处理看spring的queryForObject(如果查询结果

spring JdbcTemplate的queryForObject为空返回异常情况的一个处理

看spring的queryForObject(如果查询结果条数为0或者大于1)都会返回异常,我们希望没查到返回null,这样我们就可以给用户提示没有找到,要不我们的每个queryforObject,queryForInt...等等方法都需要手动拦截这个异常来判断为空,才能做出判断。
先看下spring的这段源码:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->spring JdbcTemplate的queryForObject为空返回错误情况的一个处理spring JdbcTemplate的queryForObject为空返回错误情况的一个处理public?<T>?T?queryForObject(String?sql,?Object[]?args,?RowMapper<T>?rowMapper)?throws?DataAccessException?spring JdbcTemplate的queryForObject为空返回错误情况的一个处理{
spring JdbcTemplate的queryForObject为空返回错误情况的一个处理??List<T>?results?=?query(sql,?args,?new?RowMapperResultSetExtractor<T>(rowMapper,?1));
spring JdbcTemplate的queryForObject为空返回错误情况的一个处理??return?DataAccessUtils.requiredSingleResult(results);
spring JdbcTemplate的queryForObject为空返回错误情况的一个处理}
spring JdbcTemplate的queryForObject为空返回错误情况的一个处理spring JdbcTemplate的queryForObject为空返回错误情况的一个处理public?static?<T>?T?requiredSingleResult(Collection<T>?results)?throws?IncorrectResultSizeDataAccessException?spring JdbcTemplate的queryForObject为空返回错误情况的一个处理{
spring JdbcTemplate的queryForObject为空返回错误情况的一个处理??int?size?=?(results?!=?null???results.size()?:?0);
spring JdbcTemplate的queryForObject为空返回错误情况的一个处理spring JdbcTemplate的queryForObject为空返回错误情况的一个处理??if?(size?==?0)?spring JdbcTemplate的queryForObject为空返回错误情况的一个处理{//记录为o返回异常
spring JdbcTemplate的queryForObject为空返回错误情况的一个处理???throw?new?EmptyResultDataAccessException(1);//此异常继承自IncorrectResultSizeDataAccessException
spring JdbcTemplate的queryForObject为空返回错误情况的一个处理??}
spring JdbcTemplate的queryForObject为空返回错误情况的一个处理spring JdbcTemplate的queryForObject为空返回错误情况的一个处理??if?(results.size()?>?1)?spring JdbcTemplate的queryForObject为空返回错误情况的一个处理{有多条记录返回异常
spring JdbcTemplate的queryForObject为空返回错误情况的一个处理???throw?new?IncorrectResultSizeDataAccessException(1,?size);
spring JdbcTemplate的queryForObject为空返回错误情况的一个处理??}
spring JdbcTemplate的queryForObject为空返回错误情况的一个处理??return?results.iterator().next();
spring JdbcTemplate的queryForObject为空返回错误情况的一个处理?}
spring JdbcTemplate的queryForObject为空返回错误情况的一个处理



下面是我的一个方法,其他的方法请大家补充:
写一个接口定义规则:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->spring JdbcTemplate的queryForObject为空返回错误情况的一个处理spring JdbcTemplate的queryForObject为空返回错误情况的一个处理public?interface?JdbcTemplateCallBack<T>?spring JdbcTemplate的queryForObject为空返回错误情况的一个处理{
spring JdbcTemplate的queryForObject为空返回错误情况的一个处理????public??T?querys(JdbcTemplate?jdbcTemplate);
spring JdbcTemplate的queryForObject为空返回错误情况的一个处理}

然后是BaseDao的通用的方法:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->spring JdbcTemplate的queryForObject为空返回错误情况的一个处理spring JdbcTemplate的queryForObject为空返回错误情况的一个处理/**?*//**
spring JdbcTemplate的queryForObject为空返回错误情况的一个处理?????*?可以用于处理查询queryfor?为空或者多条的时候返回异常的情况,现在返回null,主要是拦截IncorrectResultSizeDataAccessException异常,以及子类
spring JdbcTemplate的queryForObject为空返回错误情况的一个处理?????*?@param?jdbcTemplateCallBack
spring JdbcTemplate的queryForObject为空返回错误情况的一个处理?????*?@return
spring JdbcTemplate的queryForObject为空返回错误情况的一个处理?????*?@throws?DaoException
spring JdbcTemplate的queryForObject为空返回错误情况的一个处理?????*/
spring JdbcTemplate的queryForObject为空返回错误情况的一个处理spring JdbcTemplate的queryForObject为空返回错误情况的一个处理????public?<T>?T?queryNullAble(JdbcTemplateCallBack<T>?jdbcTemplateCallBack)?throws?DaoException?spring JdbcTemplate的queryForObject为空返回错误情况的一个处理{
spring JdbcTemplate的queryForObject为空返回错误情况的一个处理spring JdbcTemplate的queryForObject为空返回错误情况的一个处理????????try?spring JdbcTemplate的queryForObject为空返回错误情况的一个处理{
spring JdbcTemplate的queryForObject为空返回错误情况的一个处理????????????return?jdbcTemplateCallBack.querys(getJdbcTemplate());
spring JdbcTemplate的queryForObject为空返回错误情况的一个处理spring JdbcTemplate的queryForObject为空返回错误情况的一个处理????????}?catch?(Exception?e)?spring JdbcTemplate的queryForObject为空返回错误情况的一个处理{
spring JdbcTemplate的queryForObject为空返回错误情况的一个处理????????????????if((e?instanceof?IncorrectResultSizeDataAccessException)
spring JdbcTemplate的queryForObject为空返回错误情况的一个处理????????????????????????&&((IncorrectResultSizeDataAccessException)e).getActualSize()==0)
spring JdbcTemplate的queryForObject为空返回错误情况的一个处理????????????????????return?null;
spring JdbcTemplate的queryForObject为空返回错误情况的一个处理????????????//其他的异常正常抛出
spring JdbcTemplate的queryForObject为空返回错误情况的一个处理????????????throw?new?DaoException(e);
spring JdbcTemplate的queryForObject为空返回错误情况的一个处理????????}
spring JdbcTemplate的queryForObject为空返回错误情况的一个处理????}


最后是调用实例(根据id查用户):

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->spring JdbcTemplate的queryForObject为空返回错误情况的一个处理spring JdbcTemplate的queryForObject为空返回错误情况的一个处理public?SUser?getUserByColunm(final?String?columnName,?final?Object?value)?throws?DaoException?spring JdbcTemplate的queryForObject为空返回错误情况的一个处理{
spring JdbcTemplate的queryForObject为空返回错误情况的一个处理spring JdbcTemplate的queryForObject为空返回错误情况的一个处理????????return?queryNullAble(new?JdbcTemplateCallBack<SUser>()?spring JdbcTemplate的queryForObject为空返回错误情况的一个处理{
spring JdbcTemplate的queryForObject为空返回错误情况的一个处理spring JdbcTemplate的queryForObject为空返回错误情况的一个处理????????????public?SUser?querys(JdbcTemplate?jdbcTemplate)?spring JdbcTemplate的queryForObject为空返回错误情况的一个处理{
spring JdbcTemplate的queryForObject为空返回错误情况的一个处理????????????????return?jdbcTemplate.queryForObject("select?*??from?suser?where?"+columnName+"=?",?new?BeanPropertyRowMapper(SUser.class),value);
spring JdbcTemplate的queryForObject为空返回错误情况的一个处理????????????}
spring JdbcTemplate的queryForObject为空返回错误情况的一个处理????????});
spring JdbcTemplate的queryForObject为空返回错误情况的一个处理????} 1 楼 zhuxinyu 2011-10-26   文章编排有点乱。

更简单的办法就是直接queryforlist。 判断后,取第一个值。

ps:springjdbc 每个版本变化都很大,同一个方法在这个版本行,在另一个版本就不行。很无语。

热点排行