我的问题是关于数据库异常处理的良好做法。
假设我有一个应用程序在DB中存储一些数据。实现了以下层:
问题是:我是否应该处理数据库访问的异常,例如在添加新记录时(假设记录应该始终正确添加)?我应该尝试捕获DatabaseAdapter中的异常并将其添加到日志中吗?或者也许我根本不应该抓住它?
答案 0 :(得分:4)
大多数情况下,查询数据库时的异常是“开发时间”错误的结果,例如格式错误的查询,或修改模式但不增加数据库版本,或类似的东西。这些将很容易在现场找到并修复,因此您的最终用户不会受到这些类型的错误的影响。
但是,在下列情况下,您可能也有例外情况:
onUpgrade()
方法中存在错误或类似错误。实际上,这些场景没有通用答案。对于最终用户来说,显示简单错误比让应用程序强制关闭要好得多。
我的经验法则是不惜一切代价避免数据库损坏。我宁愿抛出RuntimeException
并立即杀死应用程序,而不是让它默默地做错事。此外,我宁愿显示一条消息,说明无法完成插入而不是强行关闭应用程序。
答案 1 :(得分:0)
对于这个始终适合的问题,没有共同的答案。这取决于用例。虽然两个规则总是适用:不要将过于详细的异常消息传递给上面的层(UI不需要知道SQL语法中的问题)并处理有意义的异常(不要在DB类中显示错误对话框)。例如,您可以在数据库类中捕获数据库异常,记录它,然后重新抛出一个自定义的CustomerNotFoundException,它会在UI中捕获,您可以在其中显示错误对话框。