`
Classicning
  • 浏览: 255735 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Spring JDBC中queryForObject的零结果问题

    博客分类:
  • Tech
阅读更多
Spring中的JDBC模块很好的封装了JDBC操作,将我们从繁琐的try-catch-finally-try-catch里解脱出来。但是用过JdbcTemplate很快就发现它的queryForObject方法在查询结果为空的时候不是返回null,而是抛出一个EmptyResultDataAccessException。

原来在所有的JdbcTemplate中的queryForObject方法都是类似这样

public Object queryForObject(String sql, RowMapper rowMapper) 
  throws DataAccessException {
  List results = query(sql, rowMapper);
  return DataAccessUtils.requiredSingleResult(results);
}

这里调用的是org.springframework.dao.support.DataAccessUtils里的静态方法requriedSingleResult,这个方法的定义即是在结果数大于1的时候抛出IncorrectResultSizeDataAccessException,在结果数为0的时候EmptyResultDataAccessException。

在org.springframework.dao.support.DataAccessUtils里其实还有一个方法叫singleResult。它在结果数为零的时候会返回null,其他定义和requriedSingleResult是一样的。

但是我发现所有JdbcTemplate中使用的都是requriedSingleResult这一方法。这样在使用的时候不得不预先用COUNT先算一下有没有结果,或者就是加上try-catch。总之在我看来这里用try-catch是不太合适的,起码是不完美的。

另外新的SimpleJdbcTemplate只是在JdbcTemplate上封装了Java5的新功能泛型和注释,本身还是调用JdbcTemplate,在这个问题上也没有帮助。

不知道 Rod Johnson ,Juergen Hoeller,Thomas Risberg三位作者在这个问题上是怎么想的。
分享到:
评论
3 楼 isaiahzhong 2013-03-30  
      我也是发现了这个问题,不过我使用try  catch,总是感觉这个代码不好看,很丑,
2 楼 edisonwin 2008-12-31  
没办法,修改了源代码才搞定这个问题
1 楼 gosin 2008-10-28  
我也是對這個問題存在疑惑!
難道還要try-catch

相关推荐

    springjdbc.zip_SpringJDBC_spring jdbc_spring 增删改查_springjdbc xml

    综上所述,`springjdbc.zip`文件中的示例可能展示了如何在Spring环境中配置和使用JDBC,包括数据源配置、事务管理、以及使用`JdbcTemplate`执行增删改查操作的完整流程。通过学习这些示例,开发者可以更好地理解和...

    Spring JDBC应用实例讲解

    Spring JDBC是Spring框架中的一个核心模块,主要用于简化Java数据库编程。在本文中,我们将深入探讨Spring JDBC的应用实例,了解如何利用它来实现高效且灵活的数据访问。首先,我们需要理解Spring JDBC是如何通过...

    Spring JDBC相关jar包:spring_jdbc_4.0.0.zip

    6. **异常处理**:`JdbcTemplate`将JDBC抛出的异常转换为Spring的`DataAccessException`系列异常,这些异常具有更好的语义,便于开发人员理解问题所在。 7. **存储过程**:通过`call`方法,`JdbcTemplate`也可以...

    Spring JDBC实现代码

    本篇文章将深入探讨如何使用Spring JDBC在Spring 2.5版本中与MySQL数据库进行交互,包括编程式事务处理。 首先,让我们了解Spring JDBC的基础。Spring JDBC提供了一个JdbcTemplate类,它是对JDBC API的抽象,它通过...

    Spring JDBC 增删改查

    Spring JDBC是Spring框架的一部分,它提供了一种抽象层,使得我们能够更方便地使用Java数据库连接(JDBC)来处理数据库操作,如增删改查...结合良好的事务管理和异常处理机制,Spring JDBC成为了Java开发中的重要组件。

    SpringJDBC.rar_SpringJDBC_jdbctemplate_jdbctemplate spring

    在Java的Spring框架中,Spring JDBC(Java Database Connectivity)是一个重要的模块,用于简化数据库操作。Spring JDBC通过提供JdbcTemplate和SimpleJdbcTemplate等工具类,帮助开发者以更安全、更易于管理的方式与...

    springjdbc.rar_SpringJDBC_spring jdbc

    在Spring框架中,Spring JDBC通过提供一个抽象层,使得开发者可以更方便地执行SQL查询,处理结果集,以及管理事务。下面将详细阐述两种在Spring中测试JDBC的方法。 ### 方法一:基于`JdbcTemplate` `JdbcTemplate`...

    Spring+JDBC实例

    6. **错误处理**:Spring的JDBC抽象层处理了许多底层的错误,比如关闭资源等,这使得代码更加健壮,避免了常见的数据库连接泄漏问题。 7. **DataSource配置**:在Spring中,我们需要配置一个DataSource,它是数据库...

    JavaEE的Spring JDBC与事务管理 实验

    (1)使用Spring JDBC实现书店的购书过程,即有如下一个BookShopDao接口,编写BookShopDaoImp类实现该接口中的所有方法,并通过JUnit测试这些方法。 public interface BookShopDao { //根据书号获取书的单价 //...

    Spring-JDBC整合-MySQL8、java8版本

    在现代项目中,通常使用Maven或Gradle作为构建工具,只需在pom.xml或build.gradle文件中添加Spring JDBC的依赖。对于Maven,可以添加以下依赖: ```xml <groupId>org.springframework <artifactId>spring-jdbc ...

    spring封装jdbc查询

    "spring封装jdbc查询"是Spring框架中的一个核心功能,旨在简化传统的JDBC(Java Database Connectivity)操作,提高代码的可读性和可维护性,同时减少数据库操作中的潜在错误。以下是对这个主题的详细阐述: 首先,...

    spring 整合JDBC 原创代码

    在压缩包中的"复件 SpringJDBC"文件可能包含一个简单的Spring整合JDBC的示例。代码可能包括了配置文件、实体类、DAO接口和其实现。例如,创建一个UserDao接口,使用JdbcTemplate进行用户查询: ```java public ...

    spring4 jdbc star t

    本篇文章将详细探讨Spring 4.x中JDBC(Java Database Connectivity)的起步知识。 一、Spring JDBC简介 Spring JDBC模块是Spring框架的一部分,它简化了数据库访问,提供了高级抽象层,避免了直接编写繁琐的JDBC...

    Spring连接JDBCjar包

    Spring JDBC将数据库抛出的原始JDBC异常转换为Spring的`DataAccessException`层次结构,这使得异常处理更加统一,也更易于理解问题的根源。 6. **批处理** 如果需要执行大量相似的SQL语句,Spring JDBC的`...

    Spring对JDBC的支持

    JdbcTemplate是Spring框架的一部分,它通过提供一套模板方法,简化了常见的JDBC操作,如执行SQL语句、处理结果集等。它帮助开发者避免了繁琐的JDBC代码,如连接管理、事务处理和异常处理,提高了代码的可读性和可...

    Spring boot连接oracle数据库JDBC配置步骤

    在本文中,我们将详细介绍如何使用 Spring Boot 连接 Oracle 数据库,配置 JDBC 驱动程序,并实现数据库的基本操作。 Step 1: 添加依赖项 在 Spring Boot 项目中,需要在 `build.gradle` 文件中添加 Oracle JDBC ...

    spring jdbc

    在Java世界中,Spring框架是应用最广泛的轻量级开源框架之一,它为开发者提供了许多便利,其中之一就是Spring JDBC模块。这个模块使得处理数据库操作变得更加简单,无需直接与JDBC API打交道,从而减少了代码量,...

    spring3.1 mvc jdbc 合成

    标题中的“spring3.1 mvc jdbc 合成”指的是在Spring 3.1版本中,如何集成使用Spring MVC框架和JDBC进行数据访问的技术。Spring MVC是Spring框架的一个核心模块,用于构建Web应用程序,而JDBC(Java Database ...

    spring boot整合sharding jdbc5.2.0分库分表demo

    在提供的`sharding-jdbc-demo-5.2.0`压缩包中,包含了完整的代码示例、文档和注释,可以帮助你更好地理解和实践Spring Boot与ShardingSphere的整合。通过这个示例,你可以深入了解如何在实际项目中运用...

    Spring jdbc具名参数使用方法详解

    Spring JDBC 具名参数使用方法详解 作为一个专业的 IT 行业大师,我将详细解释 Spring JDBC 具名参数使用方法的知识点。 什么是具名参数? 在 JDBC 中,参数可以使用两种方式,分别是无参数和具名参数。无参数是...

Global site tag (gtag.js) - Google Analytics