解决Incorrect result size: expected 1, actual 0异常
  RlT4dhyG8FSD 2023年11月25日 44 0

在Spring中使用jdbcTemplate.queryForObject做数据库查询时出现以下异常

信息: Loaded JDBC driver: oracle.jdbc.OracleDriver
Exception in thread "main" org.springframework.dao.EmptyResultDataAccessException: Incorrect result size: expected 1, actual 0
	at org.springframework.dao.support.DataAccessUtils.requiredSingleResult(DataAccessUtils.java:71)
	at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:801)
	at com.cgl.dao.impl.EmpDaoImpl.queryEmpByEmpno(EmpDaoImpl.java:38)
	at com.cgl.test.Test.queryEmpByEmpno(Test.java:15)
	at com.cgl.test.Test.main(Test.java:58)

错误原因    jdbcTemplate.queryForObject有且只能查询一条数据,如果数据库中没有这条数据或者数据库中这条数据有相同的那么会抛出此异常。 解决办法   可以使用Spring中的query方法,或者使用try-catch捕获异常

@Override
	public Emp queryEmpByEmpno(int empno) {
		Emp emp;
		try {
			String sql="select * from emp where empno = ?";
			RowMapper<Emp> rowMapper = new BeanPropertyRowMapper<Emp>(Emp.class);
			emp = jdbcTemplate.queryForObject(sql,rowMapper,empno);
		} catch (DataAccessException e) {
			return null;
		}
		return emp;
	}

测试类 测试emp表中存在的员工

public static void main(String[] args) {
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
		EmpDao empDao = context.getBean(EmpDao.class);
		Emp emp = empDao.queryEmpByEmpno(7788);
		if (emp == null) {
			System.out.println("没有这个员工");
		}else {
			System.out.println(emp);
		}
	}

运行结果

信息: Loaded JDBC driver: oracle.jdbc.OracleDriver
Emp [empno=7788, ename=SCOTT, job=ANALYST, mgr=7566, hiredate=1987-04-19 00:00:00.0, sal=3000.0, comm=null, deptno=20]

测试类 测试emp表中不存在的员工

public static void main(String[] args) {
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
		EmpDao empDao = context.getBean(EmpDao.class);
		Emp emp = empDao.queryEmpByEmpno(9999);
		if (emp == null) {
			System.out.println("没有这个员工");
		}else {
			System.out.println(emp);
		}
	}

运行结果

信息: Loaded JDBC driver: oracle.jdbc.OracleDriver
没有这个员工
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月25日 0

暂无评论

推荐阅读
  2Vtxr3XfwhHq   2024年05月17日   53   0   0 Java
  Tnh5bgG19sRf   2024年05月20日   107   0   0 Java
  8s1LUHPryisj   2024年05月17日   46   0   0 Java
  aRSRdgycpgWt   2024年05月17日   47   0   0 Java
RlT4dhyG8FSD