2

我正在使用 spring 的 JdbcDaoSupport 进行数据库调用。我想执行本机查询(sql 查询)来检索数据。JdbcTemplate 中是否有任何 API 可用于本机查询?我使用了 queryForObject,但如果没有数据,它会抛出异常,而我希望它在找不到数据时返回 null。

4

2 回答 2

3

有许多选项可用于使用JdbcTemplate. 链接的文档包含大量采用本机 sql 的方法,通常还有某种回调处理程序,它将完全满足您的要求。一个简单的想到的是query(String sql, RowCallbackHandler callback)

jdbcTemplate.query("select * from mytable where something > 3", new RowCallbackHandler() {
    public void processRow(ResultSet rs) {
        //this will be called for each row.  DO NOT call next() on the ResultSet from in here...
    }
});
于 2012-08-01T00:37:32.510 回答
1

Spring JdbcTemplate 的 queryForObject 方法期望您的 SQL 准确返回一行。如果没有返回行或返回的行超过 1 行,则会抛出 org.springframework.dao.IncorrectResultSizeDataAccessException。您必须使用 try catch 块包装对 queryForObject 的调用以处理 IncorrectResultSizeDataAccessException 并在引发异常时返回 null

例如

try{
   return jdbcTemplate.queryForObject(...);
}catch(IncorrectResultSizeDataAccessException e){
   return null;
}
于 2012-08-01T05:35:44.680 回答