为什么我们必须在catch中使用,如果此类包含错误(如java虚拟机异常)或NullPointerException等异常,则必须使用Exception ...这些异常是未经检查的异常。我在互联网上找到了一些例子,但我不明白为什么有必要在这段代码中使用Exception。为什么我们不捕获绑定到hibernate框架的异常?
try{ Session session = sessionFactory.getCurrentSession(); Criteria criteria = session.createCriteria(Student.class); criteria.add(Restrictions.eq("pk.stud.id",idStude)); carte = (List<StudentC>) criteria.list(); }catch(Exception e){ System.out.println("\n"+e.toString()+" "+e.getMessage()+"\n"); } System.out.println("\nENTER UnivDAO \n");
答案 0 :(得分:0)
您的hibernate
代码正在访问数据库,可以更新/删除/锁定记录。
如果您的代码在没有catch的情况下抛出unchecked exception
,则数据库连接可能会保持打开状态,并可能导致连接泄漏甚至锁定数据库记录。
此外,您可能有一个高级功能的捕获,可能会以错误的方式处理此类异常,例如期望一些不同的参数为null
答案 1 :(得分:0)
关键是这样的代码可能会抛出一整套不同的已检查异常类型。
而不是要求你捕获这5个不同的异常,该API的作者决定减少操作以说“抛出异常”。这减少了双方的努力 - 投掷列表现在更容易管理。但缺点是你失去了一些关于真实情况的信息。
这是一种常见做法。有时这是个好主意,有时候不是。
答案 2 :(得分:0)
捕获该代码的任何异常都不是必需的。许多示例只是为了演示抛出哪些异常而捕获异常。该示例可能会将carte
设置为null
,或者在try / catch块之后留空列表,这只会导致引发更多异常,或者返回无效结果。相反,应该抛出异常,并在更高级别处理,可能是在请求级别。
如果查询结果不可用,那么是否因为数据库关闭或编程错误并不重要。反应通常是一样的。将错误消息发送给用户,或使用默认值。记录错误,然后继续下一个请求。
同样在示例中,调用System.out
或e.getMessage()
意味着我们丢失了很多关于异常发生的位置和时间的信息。它并不意味着在实际代码中使用,而是应该将异常发送给记录器。