我的问题是关于数据库异常处理的良好实践.
假设我有一个应用程序将一些数据存储在DB中.实现了以下层:
> DatabaseAdapter – 处理SQL查询并以模型的形式向更高层提供数据.适配器包含以下方法:
>列出getAllUsers()
> void addUser(UserModel用户)
> UserListActivity – 显示所有用户的列表,允许添加新用户等.此活动使用DatabaseAdapter读取/写入数据库.
问题是:我是否应该处理数据库访问的异常,例如在添加新记录时(假设记录应该始终正确添加)?我应该尝试捕获DatabaseAdapter中的异常并将其添加到日志中吗?或许我根本不应该抓住它?
最佳答案
大多数情况下,查询数据库时的异常是“开发时间”错误的结果,如错误的查询,或修改模式但不增加数据库版本,或类似的东西.这些将很容易在现场找到并修复,因此您的最终用户不会受到这些类型的错误的影响.
但是,在下列情况下,您可能也有例外情况:
>您尝试从多个进程(灾难处方)访问您的sqlite数据库.
>用户的设备上的磁盘空间不足.
>由于未正确转发用户输入,您的查询格式错误.
>你的onUpgrade()方法中有一个错误或类似的东西.
>您正在使用参照完整性(可能在sqlite 3.6.19及更高版本中),并且某些表约束失败.
真的,这些场景没有普遍的答案.对于最终用户来说,显示简单错误比让应用程序强制关闭更好.
我的经验法则是不惜一切代价避免数据库损坏.我宁愿抛出一个RuntimeException并立即杀死应用程序,而不是让它默默地做错了.此外,我宁愿显示一条消息,说无法完成插入而不是强行关闭应用程序.