Android:我应该如何处理数据库访问异常?

kma*_*mur 5 database android exception-handling

我的问题是关于数据库异常处理的良好实践.

假设我有一个应用程序将一些数据存储在DB中.实现了以下层:

  1. DatabaseAdapter - 处理SQL查询并以模型的形式向更高层提供数据.适配器包含以下方法:
    • 列出getAllUsers()
    • void addUser(UserModel用户)
  2. UserListActivity - 显示所有用户的列表,允许添加新用户等.此活动使用DatabaseAdapter读取/写入数据库.

问题是:我是否应该处理数据库访问的异常,例如在添加新记录时(假设记录应该始终正确添加)?我应该尝试捕获DatabaseAdapter中的异常并将其添加到日志中吗?或许我根本不应该抓住它?

wsa*_*lle 4

大多数时候,查询数据库时的异常是“开发时”错误的结果,例如格式错误的查询,或者修改了架构但没有增加数据库版本,或者类似的事情。这些问题很容易当场找到并修复,因此您的最终用户不会受到这些类型的错误的影响。

但是,在以下情况下也有可能出现例外情况:

  • 您尝试从多个进程访问 SQLite 数据库(这会导致灾难)。
  • 用户的设备上的磁盘空间不足。
  • 由于未正确转义用户输入,您的查询格式不正确。
  • 您的方法存在错误onUpgrade()或类似的问题。
  • 您正在使用引用完整性(可能在 SQLite 3.6.19 及更高版本中)并且某些表约束失败。

事实上,这些场景没有通用的答案。对于最终用户来说,显示一个简单的错误比强制关闭应用程序要好得多。

我的经验法则是不惜一切代价避免数据库损坏。我宁愿抛出一个RuntimeException并立即杀死该应用程序,而不是让它默默地做错事。另外,我宁愿显示一条消息,指出插入无法完成,也不愿强制关闭应用程序。