Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:我应该如何处理DB访问异常?_Android_Database_Exception Handling - Fatal编程技术网

Android:我应该如何处理DB访问异常?

Android:我应该如何处理DB访问异常?,android,database,exception-handling,Android,Database,Exception Handling,我的问题是关于DB异常处理的良好实践 假设我有一个在DB中存储一些数据的应用程序。实现了以下层: DatabaseAdapter—处理SQL查询并以模型的形式向更高层提供数据。适配器包含以下方法: 列表getAllUsers() void addUser(UserModel用户) UserListActivity-显示所有用户的列表,允许添加新用户等。此活动使用DatabaseAdapter读取/写入数据库 问题是:我是否应该处理数据库访问的异常,例如,在添加新记录时(假设应始终正确添加该记

我的问题是关于DB异常处理的良好实践

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

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

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

    对于这个问题,没有一个通用的答案总是适用的。这取决于用例。但有两条规则始终适用:不要将太详细的异常消息传递到上面的层(UI不需要知道SQL语法中的问题)和在有意义的地方处理异常(不要在DB类中显示错误对话框)。例如,您可以在DB类中捕获数据库异常,将其记录下来,然后重新抛出一个自定义CustomerNotFoundException,该异常在UI中被捕获,您可以在UI中显示错误对话框。

    大多数情况下,查询数据库时的异常是“开发时间”错误的结果,例如错误的查询,或者修改您的模式,但不增加数据库版本,或者类似的事情。这些错误很容易在现场找到并修复,因此您的最终用户不会受到这些类型错误的影响

    但是,在以下情况下,也可能存在例外情况:

    • 您试图从多个进程访问您的SQLite数据库(这是灾难的原因)
    • 用户设备上的磁盘空间不足
    • 由于未正确转义用户输入,您的查询格式不正确
    • 您的
      onUpgrade()
      方法或类似方法中存在错误
    • 您使用的是引用完整性(在SQLite 3.6.19及更高版本中可能存在),一些表约束失败
    真的,对于这些场景没有通用的答案。例如,对于最终用户来说,显示一个简单的错误比强制关闭应用程序要好得多

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