`

JdbcTemplate queryForObject Incorrect result size: expected 1, actual 0

 
阅读更多

使用Spring中的jdbcTemplate 时,通过id查询不到结果时返回Incorrect result size: expected 1, actual 0

@Override
	public <T> T queryForObject(String sql, RowMapper<T> rowMapper, Object... args) throws DataAccessException {
		List<T> results = query(sql, args, new RowMapperResultSetExtractor<T>(rowMapper, 1));
		return DataAccessUtils.requiredSingleResult(results);
	}

 DataAccessUtils.requiredSingleResult(results);这个方法

public static <T> T requiredSingleResult(Collection<T> results) throws IncorrectResultSizeDataAccessException {
		int size = (results != null ? results.size() : 0);
		if (size == 0) {
			throw new EmptyResultDataAccessException(1);
		}
		if (results.size() > 1) {
			throw new IncorrectResultSizeDataAccessException(1, size);
		}
		return results.iterator().next();
	}

 结果返回0和大于一个都会抛出异常,我们使用这个方法是期望返回一个对象的,但是可能返回0,我们需要的是null而不是异常,可以使用DataAccessUtils.uniqueResult(query);方法

 

      / **
	 * 查询单个对象
	 * @param id
	 * @return
	 */
	public User findUserById(Integer id) {
		String sql = "select * from tuser where id = ?";
		List<User> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<User>(User.class), id);
		return DataAccessUtils.uniqueResult(query);
	}

 queryForMap使用如下方法

public Map<String, Object> findUserMap(Integer id) {
		String sql = "select * from tuser where id = ?";
		Object[] args = new Object[]{id};
        List<Map<String, Object>> results =     
                jdbcTemplate.query(sql, args,  new RowMapperResultSetExtractor<Map<String, Object>>(new ColumnMapRowMapper(), 1));    
        return DataAccessUtils.uniqueResult(results);    
	}

 

   java学习交流群:513650703

分享到:
评论

相关推荐

    JdbcTemplate的jar包.rar

    JdbcTemplate的jar包 内含: commons-logging-1.2.jar spring-beans-5.0.0.RELEASE.jar spring-core-5.0.0.RELEASE.jar spring-jdbc-5.0.0.RELEASE.jar spring-tx-5.0.0.RELEASE.jar 查询一行的内容,封装为...

    Spring--JdbcTemplate.pdf

    2. 在Spring的配置文件中配置数据源和JdbcTemplate对象,通常会用到数据库连接池,比如Apache的DBCP或C3P0。 3. 创建对应的Service类和DAO(Data Access Object)类。Service类用于封装业务逻辑,而DAO类负责与...

    jdbcTemplate

    5. **查询结果处理**:`JdbcTemplate`提供了多种方法来处理查询结果,如`queryForList`、`queryForObject`等,可以方便地将结果映射到Java对象。 6. **回调接口**:通过`PreparedStatementCreator`和`...

    java基于jdbctemplate数据持久层操作封装

    Java中的JdbcTemplate是Spring框架提供的一种用于简化JDBC(Java Database Connectivity)操作的工具,它在数据持久层操作中扮演着重要角色。JdbcTemplate通过消除大量重复的JDBC样板代码,提高了代码的可读性和可...

    spring jdbcTemplate 注入到servlet

    List, Object&gt;&gt; result = jdbcTemplate.queryForList(sql); // 处理结果... } ``` 通过这种方式,`Spring JdbcTemplate`使得在Servlet中进行数据库操作变得更加简单和高效。它的主要优点包括: - **异常处理**...

    打印JdbcTemplate执行sql

    DEBUG org.springframework.jdbc.core.JdbcTemplate - Setting SQL parameter value: 1, java.lang.Integer ``` 3. **自定义日志**:如果你需要更细粒度的控制,比如格式化输出或者添加额外的信息,可以自定义`...

    Java 使用JdbcTemplate 中的queryForList发生错误解决办法

    Incorrect column count: expected 1, actual 5 ``` 二、解决方案 错误的原因是,查询返回的结果列期望为 1,但实际返回的是 5 列,因为 test 表中有 5 个字段,故返回 5 列。这个方法参数的解释是这样的: ```java...

    JDBCTemplate+JavaPOJO实现通用DAO

    1. **配置数据源**:在Spring的配置文件中定义数据源DataSource,可以使用Apache的DBCP或C3P0等连接池实现。 2. **创建JdbcTemplate实例**:将数据源注入到JdbcTemplate bean中,如: ```xml &lt;bean id="...

    jdbcTemplate-runtime-update:使用Spring Boot在运行时更改DataSources和JdbcTemplate

    jdbcTemplate-runtime-update 使用Spring Boot在运行时更改DataSources和JdbcTemplate 稍后,我将文件编辑为一个小型项目,并编写有用且详细的说明

    spring jdbcTemplate 源码

    4. 调用JdbcTemplate提供的方法,如`update()`执行DML语句,`query()`执行查询,`queryForList()`获取列表,`queryForObject()`获取单个对象等。 5. 使用占位符(问号)或命名参数进行SQL动态绑定,避免SQL注入。 ...

    jdbcTemplate相关jar包.zip

    JdbcTemplate是Spring框架中的一个核心组件,主要用于简化Java数据库编程。它通过提供一系列模板方法,使得开发者能够以一种声明式的方式处理SQL语句,而无需直接操作Connection、Statement和ResultSet等底层API,...

    4.Spring中的JdbcTemplate,Spring中的的事务,

    ### Spring中的JdbcTemplate #### JdbcTemplate概述 JdbcTemplate是Spring框架提供的一种用于简化JDBC编程的对象。通过封装原生的JDBC API,JdbcTemplate不仅提高了代码的可读性和可维护性,还帮助开发者避免了...

    JdbcTemplate.jar

    《Spring JDBC:深入理解JdbcTemplate》 在Java的Web开发中,Spring框架以其强大的功能和易用性赢得了广泛的认可。其中,Spring JDBC模块是Spring框架的重要组成部分,它为数据库操作提供了一种简单而有效的抽象,...

    springmvc整合JdbcTemplate框架

    User user = jdbcTemplate.queryForObject(sql, new Object[]{userId}, User.class); ``` 3. **事务管理**:在Spring MVC中,事务管理通常是声明式的,通过在Service层的方法上添加@Transactional注解来开启事务...

    spring mvc注解jdbctemplate

    JdbcTemplate提供了一系列的便捷方法,如`update()`, `queryForObject()`, `queryForList()`等,涵盖了常见的CRUD操作。这些方法都封装了SQL执行、结果转换等细节,使得代码更加简洁。 此外,JdbcTemplate还支持...

    Spring-JdbcTemplate

    return jdbcTemplate.queryForObject(sql, new Object[]{username}, new UserRowMapper()); } ``` ### 5. JdbcTemplate 与 MyBatis 比较 - **灵活性**:MyBatis 提供了更灵活的 SQL 编写方式,支持 XML 或注解...

    spring-jdbcTemplate实例工程

    1. **JdbcTemplate对象**:这是Spring JdbcTemplate的核心,它包含了执行SQL语句的所有方法,如update()用于更新,query()用于查询,insert()用于插入等。 2. **参数绑定**:JdbcTemplate支持多种方式的参数绑定,...

    jdbcTemplate需要用到的jar包.zip

    JdbcTemplate是Spring框架中的一个核心组件,主要用于简化Java数据库连接(JDBC)的操作。它提供了一种声明式的方式来执行SQL语句,使得开发者无需直接处理低级别的JDBC代码,从而减少了错误并提高了代码的可读性...

Global site tag (gtag.js) - Google Analytics