查不到数据时抛出EmptyResultDataAccessException -.
spring查不到数据时抛出EmptyResultDataAccessException -.
org.springframework.dao.EmptyResultDataAccessException: Incorrect result size: expected 1, actual 0
使用jdbctemplate queryforobject 报出
org.springframework.dao.EmptyResultDataAccessException
spring这么做的目的
当使用jdbcTemplate的queryForObject的方法的时候,为何查不到记录的时候,要抛出
EmptyResultDataAccessException 异常,而不返回nulll, spring 这样做的目的是什么呢?
1、 设计可能是为了健壮性的考虑,防止用户不做null的判断。
2、 queryForObject方法是为查询结果有且仅(必须)有一条记录的情况而设计的
所以查询不出结果就抛出异常
3、 jdbcTemplate的异常都是RuntimeException,我估计它的设计思想就是你的程序只用考虑正常的处理逻辑而不用写一堆try..catch的东西,所有异常都直接抛给调用者处理。基于如上原则,每个方法有自己的正常结果,非正常结果都抛异常(包括没查到数据也算异常,因为你的逻辑是基于查到数据的)
----------------------------------------------
建议使用queryForList
----------------------------------------------
// String sql = null;
// String jsonData = null;
//
// sql = builderSQL(MANUSCRIPT_TABLE_NAME,MANUSCRIPT_TABLE_JSON_COLUMN_NAME,MANUSCRIPT_TABLE_NAME_PREFIX_NAME);
// jsonData = simpleJdbcTemplate.queryForObject(sql,String.class, ReportConstants.FAPL_AFFIRM_OTHER_INCOME_APP_NO, projectId);
//
// JSONObject jsonObj = fromObject(jsonData);
// return jsonObj;
String sql = builderSQL(MANUSCRIPT_TABLE_NAME,MANUSCRIPT_TABLE_JSON_COLUMN_NAME,MANUSCRIPT_TABLE_NAME_PREFIX_NAME);
List<Map<String,Object>> listMap = new ArrayList<Map<String,Object>>();
listMap = simpleJdbcTemplate.queryForList(sql, ReportConstants.FAPL_AFFIRM_OTHER_INCOME_DET_NO,projectId);
JSONObject jsonObj = new JSONObject();
if(listMap!=null && listMap.size()>0){
jsonObj = fromObject(listMap.get(0).get(MANUSCRIPT_TABLE_JSON_COLUMN_NAME));
}
return jsonObj;