当前位置: 首页 > 知识库问答 >
问题:

查询Oracle db时意外的IncorrectResultSizeDataAccessException

高建本
2023-03-14

我有下表:

  create table INTERNATIONALIZATION (
    ID number not null unique,
    LANG char(2) not null,
    EXT_ID number not null,
    EXT_COLUMN char(32) not null,
    EXT_NAME char(32) not null,
    TRANS_VAL nvarchar2(512) not null
  );
public Optional<String> getTranslation(long idSkill, Locale lang, String extColumn, String extName) {
    try {
        return Optional.of(jdbcTemplate.queryForObject("select TRANS_VAL from INTERNATIONALIZATION where ext_id = ? and lang = ? and ext_column = ? and ext_name = ?", String.class, idSkill, lang.toLanguageTag(), extColumn, extName));
    } catch (IncorrectResultSizeDataAccessException ex) {
        return Optional.empty();
    }
}

共有1个答案

吕越彬
2023-03-14

您可能需要验证传递给查询的参数。它们可能与您在Oracle SQL Developer中使用的不同。

为了调试,在捕获异常时,打印所使用的值。

    try {
            return Optional.of(jdbcTemplate.queryForObject("select TRANS_VAL from INTERNATIONALIZATION where ext_id = ? and lang = ? and ext_column = ? and ext_name = ?", String.class, idSkill, lang.toLanguageTag(), extColumn, extName));
        } catch (IncorrectResultSizeDataAccessException ex) {
            return Optional.empty();
          // print idSkill, lang.toLanguageTag(), extColumn, extName here
        }

另外,由于使用的是CHAR列,所以在比较时必须注意填充的空格。当您使用绑定变量时,将char与varchar进行比较时可能会出现问题。

    Table created.

    SQL> insert into t1 values ('A');

    1 row created.

    SQL> commit;

    Commit complete.
    SQL> select count(*) from t1 where c1 = 'A'; 

      COUNT(*)
    ----------
         1

    SQL> select count(*) from t1 where c1 = 'A ';

      COUNT(*)
    ----------
         1
    SQL> select '<'|| c1 || '>' from t1;

    '<'||C1
    -------
    <A    >
    SQL> var s varchar2(5)
    SQL> exec :s := 'A' ;

    PL/SQL procedure successfully completed.

    SQL> select count(*) from t1 where c1 = :s;

      COUNT(*)
    ----------
         0

数据必须相等(5个特征--一个字母,4个空格):

    SQL> exec :s :='A    '

    PL/SQL procedure successfully completed.

    SQL> select count(*) from t1 where c1 = :s;

      COUNT(*)
    ----------
         1

这只是一个提示,但我认为您最好使用varchar2列:

      create table INTERNATIONALIZATION (
        ID number not null unique,
        LANG varchar2(2) not null,
        EXT_ID number not null,
        EXT_COLUMN varchar2(32) not null,
        EXT_NAME varchar2(32) not null,
        TRANS_VAL nvarchar2(512) not null
      );
 类似资料:
  • 我知道我们可以直接从左连接实现它,但由于一些限制,我们使用交叉连接,所以我需要走这条路... 请分享您的想法,欢迎提出建议 更新1我们没有使用关联,这就是为什么我们严格交叉连接。

  • 我使用Laravel查询生成器来获取一组行,按2列排序,然后(以前为)。然而,结果按(正确)对它们进行排序,但是(或)的次要顺序是不正确的。我是不是搞错了,是不是搞错了? 以下是我的问题: 这反过来又返回: 你看,14号票的顺序是71,75,72,而不是71,72,75。 以下是表格结构:

  • 我有这个问题。将其从sql查询转换为hql。我有以下错误“意外标记:(靠近第2行第列)” 我不知道怎么了

  • 我需要制作一个Jar来格式化Access数据库中的电话号码,并为此使用了UcanAccess,所有查询都可以正常工作,直到我需要用格式化的电话号码更新数据库列。 正如其他文章中所建议的那样,我尝试使用括号,格式化的电话号码被自己存储在ArrayList中,然后我尝试用update语句添加。如果有什么不清楚的,我会努力提供进一步的信息。 我将非常感谢任何想法

  • 问题内容: 我创建了一个小测试应用程序来跟踪我在Heroku上使用Postgres遇到的问题:http : //snippi.com/s/xd511rf 正如您在第 49 行中看到的那样,我想检索 今天 创建的所有条目。这将是我使用Ruby Gem DataMapper进行的 测试数据的前两项。 当我在笔记本电脑(Ubuntu 12.10,HP,Ruby 1.9.3)上运行此应用程序时,一切都会得

  • 我有一个查询,其中我正在连接两个表ROuteMaster和routeHalts。当我执行内部连接时,我会得到 我在网站上搜索,发现了类似的问题和对它的回应。所提到的问题是 我在RouteHalts中为RouteMaster定义了多对一映射,我在RouteHalts中为RouteMaster定义了getter和setter方法 但仍然得到相同的错误。能请一个人给我指路吗。 映射文件 公共类Route