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

我应该捕获EmptyResultDataAccessException吗?

全弘深
2023-03-14

我有一个SQL语句,我希望它返回一行,因为我正在传递主键。所以我的选择是

  1. 将queryForObject包装为try/catch,捕获EmptyResultDataAccessException,并返回null
  2. 调用更改为queryForList,然后展开列表,并(希望)返回第一个元素,或null

我在某个地方读到过,将EmptyResultDataAccessException作为cathing是一种不好的做法,因为它扩展了运行时异常。

但我看不出有什么问题。

我有兴趣听取意见

共有2个答案

申屠亦
2023-03-14

大多数时候,我遇到这种情况(mvc/ws),我允许抛出异常,但在异常解析器中处理异常。返回null的问题是,应用程序依赖于它,并且需要更进一步,因此您必须稍后进行null检查,而不是在预期的时间进行检查。这可能会导致问题,因为并非所有开发人员都会在需要时执行空检查,然后您可能会在稍后运行到npe。根据您编写的应用程序类型,有几种方法可以使用异常解析器捕获和处理异常。通过使用异常解析器,您可以以不同的方式处理每个异常,并向用户提供反馈。

这里有一种使用spring mvc的方法。这样,如果主键对象不存在,您可以向用户发送常规消息。http://www.mkyong.com/spring-mvc/spring-mvc-exception-handling-example/

贺宝
2023-03-14

我认为抓住这个例外是完全可以接受的。这是我能回忆起的唯一一个Spring异常,但我有有效的用例来尝试查找可能不存在的记录。

 类似资料:
  • 问题内容: API文档说永远不要捕获 Throwable 子类 错误 ,这表示异常行为。这是否意味着错误和异常之间的隔离是为了告诉程序员应该捕获哪个子类,而不应该捕获哪个子类?还是还有更多呢? 问题答案: 通常,这是严重错误(通常 在平台本身内部 ),您无法想象得到处理。我曾经关心醒目的唯一时间是为了 记录它 ,下面我再重新抛出。 这是非常重要的,因为它很容易让错误(和运行时异常),以这样的方式,

  • 问题内容: 该方法中类抛出2 :和,但在我的书上面的代码捕获和。 为什么代码会捕获但没有捕获? 如果在线文档的Formatter类format()方法中甚至没有声明它,我们如何知道是否需要捕获? 问题答案: 文献:是一个 可以由不同类的在Java中像迭代器,枚举,被抛出 扫描仪 或StringTokenizer的。 在你的情况是。它不是从方法。 这 仅仅是在安全方面(如果不给下一个输入,然后抛出此

  • 我正在处理Perl 6的控制异常。警告会引发正常异常控制流不可见的控制异常,该异常会自行恢复。那有点酷。 所以,我写了这个来看看会发生什么。除了了解Perl 6的实际功能外,我不想解决特定的问题: 它看起来像两个火: 注意,有一种莫阿恐慌,我已经提出了一个问题。但是,我并不是真的在问这个问题。 我对这里的水流图很好奇。我希望sub中的能够捕获异常并恢复,这样它就不会渗透到。这应该如何进行? 另外,

  • 问题内容: 我正在Linux下使用g 在C 中编写一个非常简单的应用程序,并且试图将一些原始字符串作为异常抛出(是的,我知道,这不是一个好习惯)。 我有以下代码(简化): 然后我进入控制台。但是,如果我将文字字符串静态转换为其中一个,或者按预期打印。我的问题是:如果我不想使用静态强制类型转换,我应该捕获哪种类型? 问题答案: 您需要使用而不是。任何东西都不会,也不会抓住。 关于匹配的类型,捕获具有

  • 我有一个使用Jersey和Jackson在Glassfish 3.1.2下运行的RESTful web服务: 我现在想为这些意外的异常添加日志记录,但是尽管搜索,还是找不到我应该如何处理这个问题。 我尝试使用,并且可以确认它在方法主体中应用,但是它的方法从未被调用,因为在未捕获的异常到达我的处理程序之前,其他东西正在处理这些异常。 我看到一些人使用的另一个选项是,它捕获所有异常,然后筛选出WebA

  • 问题内容: 我使用a 将字符串转换为可以上传到SFTP服务器的文件(需要流)。事后结束这一点有什么意义吗?据我在源代码中看到的,它只是将字符串设置为… 我可以这样做,但是由于将close方法标记为throw,并且我只需要将其包装在try catch中,代码最终看起来比可能需要的可怕得多。 问题答案: 如果您知道要处理的是您将要扔掉的产品,那么我看不出有什么理由要关闭它。我无法想象关闭它后会保留对它