【问题标题】:Handling Android's SQLiteException处理 Android 的 SQLiteException
【发布时间】:2013-11-18 19:50:42
【问题描述】:

我正在尝试使我的 Android 代码中的 SQLite 数据库交互更加健壮。

在我的表中有一列标记为UNIQUE。现在我想处理我的应用程序尝试输入非唯一条目的情况。为此,我使用方法SQLiteDatabase.insertOrThrow()。该方法抛出android.database.sqlite.SQLiteException。不幸的是,这个异常不允许我得到错误代码(就像java.sql.SQLException 一样)。 所以在我的 catch-block 中,我无法处理异常错误代码敏感,对吗?

在 Android 上处理 SQLiteExceptions 的最佳做法是什么?我的应用程序真的可以只说有问题但不找出问题所在吗?

感谢您的帮助和时间。 丹

【问题讨论】:

  • 除了throw之外,还有其他的冲突处理机制。参见例如insertWithOnConflict()。没有单一的“最佳实践”,这取决于您的具体情况。你能否澄清你的问题更具体?谢谢。
  • 感谢您的评论 laalto,我的问题是是否有办法从 SQLiteException 获取从 SQLite 返回的错误代码。 Roy Dictus 向我指出了 SQLiteConstraintException 之类的子类,它们基本上转换为错误代码。所以我的问题得到了回答:-)

标签: java android sql sqlite exception-handling


【解决方案1】:

在这种特殊情况下,您可以做的是验证您要插入的记录是否确实是唯一的。这样您就可以避免插入非唯一值,并且此问题不再是问题。

话虽如此,许多特定的异常都继承自SQLiteException,例如SQLiteConstraintException。你也可以抓住特定的,做你必须做的。

【讨论】:

  • 谢谢,我忽略了子类。它们使错误处理更容易。我想我会听从你的建议,在插入之前检查我的条目是否唯一。
  • 如何检查新条目的唯一性?我的意思是检查唯一性需要搜索以前的记录,这意味着我们需要在每次插入时运行一个额外的查询。有什么方法可以让我们获得发生的异常源并将其指向唯一的约束违规。这样我们就不需要在插入之前进行检查了。
  • @smasher,如果一列被标记为 UNIQUE 并且它被索引,那么额外搜索具有该列值的行会很快。这也是避免重复的最简单、最可靠的方法。
猜你喜欢
  • 2012-11-04
  • 2016-01-04
  • 1970-01-01
  • 2015-06-30
  • 2017-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-06
相关资源
最近更新 更多