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

当RowMapper返回null时,JdbcTemplate做什么?

柯翔
2023-03-14

我正在使用JdbcTemplate。query(sql、args、rowMapper)方法调用以返回对象列表。在某些情况下,我希望跳过一行,而不将其添加到返回的列表中。在这些情况下,我想到了两种解决方案:

  1. 让行映射器返回null
  2. 让RowMapper抛出一个异常(我知道SQLExceptions已被处理,所以这是一种可能性)

我的问题是:当RowMapper.mapRow返回null时,JdbcTemboard是否将其添加到列表中?如果没有,我应该抛出一个SQLException吗?

共有3个答案

楚岳
2023-03-14

当您返回null时,它确实会将此null添加到列表中,此外,如果您抛出SQLException,它会“包装”在扩展RuntimeException的Exception中,如果您不想,则不必显式包含try-catch语句。

曾丰茂
2023-03-14

使用行映射器填充后,只需从列表中删除null即可。

rows = JdbcTemplate.query(sql, args, rowMapper);
rows.removeAll(Collections.singletonList(null));
卫嘉佑
2023-03-14

这是一段将行添加到结果列表的代码

public class RowMapperResultSetExtractor<T> implements ResultSetExtractor<List<T>> {
    ...
    public List<T> extractData(ResultSet rs) throws SQLException {
        List<T> results = (this.rowsExpected > 0 ? new ArrayList<T>(this.rowsExpected) : new ArrayList<T>());
        int rowNum = 0;
        while (rs.next()) {
            results.add(this.rowMapper.mapRow(rs, rowNum++));
        }
        return results;
    }
    ...

正如我们所看到的,它实际上会添加null。然而,除非有bug,否则行映射器没有理由返回null。

 类似资料:
  • 我有一个RecolyerView,当activity启动时,它工作得很好。当我从那个activity去另一个再回来时,recyclerView是空的。它什么也不显示,但有时它返回值,但布局受到干扰,即项目之间有空隙,或布局将有一个很大的空隙,从activity顶部。 类的代码是: 这是activity首先启动时的影像 在此输入图像说明 这是恢复activity时的形象 在此输入图像说明 日志如下所

  • 数据库中的每一行都是这样的 现在我想这样返回上面的数据 我将Spring的JdbcTemplate与行映射器一起使用,但我只能得到所有行的列表。由于我无法在RowMapper中维护我的主映射(我可以在RowMapper类中有一个静态映射吗?但我不希望它是静态的,因为这是一个webservice,后续调用可能会出错。),我只能选择获取该行列表,然后使用逻辑创建所需的集合。 我开始了解,但我找不到如何

  • 根据JSON规范,表示null值的正确方法是文字。 预期结果: 实际结果:

  • 问题内容: 这是简单的代码,我没有得到设置位图的结果,而是得到了null。谁能告诉我我在哪里犯错了? 更新 好的,所以我无法像我想的那样将文本转换为图像。这样呢 这会创建位图吗? 问题答案: 从文档中: 返回 解码的位图;如果无法解码图像,则 返回 null。 字符串“ test”中涉及的字节不是有效的位图,对吗? 如果将文本“ test”保存在名为or 等的文件中,并试图在Windows中打开它

  • 问题内容: 我已经存储了在该数据库中插入并插入记录的过程。我想获取最后插入的记录的ID。返回NULL并返回正确的ID,为什么会发生?如我所读,因此最好在表上有一些触发器的情况下使用。我可以使用吗?不论触发器如何,它是否都在表的范围内返回ID? 那么问题是什么以及使用什么呢? 已编辑 问题答案: 就像奥德(Oded)所说的那样,问题在于您在执行之前要先询问身份。 作为解决方案,最好尽可能地接近运行。

  • 我正在尝试访问项目中的文件。但是getResource方法返回null。 以及eclipse工作区中项目文件夹的外观: 为什么啊?我想访问我的资产文件夹中的文件? 编辑我创建了一个jar文件,这是jar的内容: 已解决 首先,我有很多图像文件,所以我想把它们组织在一个文件夹中。我把assets文件夹放在src目录中,最后我能够访问这些文件。