【问题标题】:JdbcTemplate queryForObject() with error when using with parameters [duplicate]JdbcTemplate queryForObject() 与参数一起使用时出错 [重复]
【发布时间】:2021-08-19 16:34:48
【问题描述】:

我收到错误 org.springframework.dao.EmptyResultDataAccessException 带有 detailMessage "不正确的结果大小:例外 1,实际 0"

执行时:

Long id = jdbcTemplate.queryForObject("SELECT ID FROM SOME_TABLE WHERE SOME_PROP = ?", new Object[]{"00"}, Long.class);

但是当我执行后它可以工作:

Long id = jdbcTemplate.queryForObject("SELECT ID FROM SOME_TABLE WHERE SOME_PROP = '00'", Long.class);

描述列(Oracle DB):

ID - NUMBER(4)

SOME_PROP - CHAR(4)

这是一个演示问题的虚构示例。什么错误,请解释!!

【问题讨论】:

  • 你为什么要传递一个数组作为参数(即new Object[]{"00"})?您是否期望查找数组中的任何项目?喜欢SELECT ID FROM TABLE WHERE VALUE IN(?)
  • 是的,它有帮助! "cast(? as char(n))" 问题只在 char 类型 (n) 中被发现!对于 varchar(n)、varchar2(n) 一切正常且无需强制转换。我认为这是 Oracle JDBC 驱动程序的问题。

标签: java spring


【解决方案1】:

而不是将其作为对象传递。尝试存储为字符串并作为输入传递。我认为它应该可以正常工作。

EmptyResultDataException 仅在您没有该查询的值时发生。 由于您使用的是 queryforObject,因此它需要来自给定查询的值。否则会抛出 EmpltyResultDataException。

【讨论】:

  • Long id = jdbcTemplate.queryForObject("SELECT ID FROM SOME_TABLE WHERE SOME_PROP = ?", new String[]{"00"}, Long.class); 如果这就是你所说的,那就行不通了。而且打字是一种不好的语气,我可以传递不同的参数
猜你喜欢
  • 2023-03-22
  • 1970-01-01
  • 2018-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
相关资源
最近更新 更多