【问题标题】:app explosion with conflicting sql primary key具有冲突 sql 主键的应用程序爆炸
【发布时间】:2010-08-31 15:10:33
【问题描述】:

我在数据库中有一个表,其中 _id 列是主键。如果我尝试使用已存在的 _id 插入此表,我的应用程序将崩溃。我怎样才能做到这一点?我可以吃某种特定的例外吗?我试过 SQLiteException 无济于事。

【问题讨论】:

  • 您自己插入 ID 并且不让数​​据库为您分配 ID 是否有特殊原因?至于异常的类型,肯定会在异常详情中列出吗?
  • 我正在同步从网络服务中提取的数据

标签: android exception insert sqlite


【解决方案1】:

根据定义,主键必须是唯一的——单个值必须引用单个行。

你只能通过改变一些东西来做你想做的事——要么是数据库结构,所以这个列不再被定义为主键(尽管在你这样做之前要仔细考虑——任何针对旧模式编写的应用程序都会假设,当基于 _id 字段进行选择时,单个 id 将产生一行,并且您将打破该假设,并且很可能是应用程序)。另一件事是改变数据给它一个新的_id。

【讨论】:

  • 感谢您的回复。我在这里所做的是同步从 Web 服务中提取的数据。目前,写入同步是为了永远不会拉两次新行。但是,如果有什么东西从裂缝中溜走,我不希望应用程序在用户身上崩溃。我了解主键是什么,我想要一种干净的方式来处理这个异常。
【解决方案2】:

我发现了我的问题。

我现在正在使用 insertOrThrow 并捕获 SQLiteExceptions。此外,我一直在抛出另一个异常,但没有在任何地方捕获它。我现在正在捕捉并记录它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    相关资源
    最近更新 更多