【问题标题】:get name of failed constraint for resolving获取失败约束的名称以进行解析
【发布时间】:2014-10-09 00:02:53
【问题描述】:

在 android sqlite 和 sql server 之间同步多主数据库期间,我需要解决 android 上失败的唯一约束。我已经在 android 中创建了 sqlite 数据库,其中包含所有主键、外键和唯一约束。

这是一个示例表的示例。

db.execSQL("CREATE TABLE " + Tables.ARTIST + " ("
            + BaseColumns._ID + " INTEGER,"
            + ArtistColumns.ID + " TEXT NULL,"
            + ArtistColumns.MODELTYPE + " TEXT NULL,"
            + ArtistColumns.NAME + " TEXT NULL,"
            + "FOREIGN KEY (" + ArtistColumns.MODELTYPE + ") " + References.MODELTYPE_ID + ","
            + "unique(" + ArtistColumns.MODELTYPE + "," + ArtistColumns.NAME + ")"
            + "PRIMARY KEY(" + ArtistColumns.ID + "))");

我正在使用 contentprovider 进行数据库操作。在提供者的插入方法中,我可以通过捕获 SQLiteConstraintException 来捕获失败约束的异常。但我需要知道如何获取失败的唯一约束的名称,以便解决冲突。

【问题讨论】:

    标签: android sqlite android-sqlite unique-constraint


    【解决方案1】:

    最近足够多的 SQLite 版本在错误消息中显示约束名称。

    在 Android 上,SQLite 版本不太可能是最新的。 您必须手动检查可能的字段值。

    【讨论】:

    • 即使我在 android 调试日志中出现冲突错误,它也会在异常消息中显示约束名称失败。所以我认为有可能以编程方式获得相同的结果。
    • 如果您确定可以运行您的应用程序的任何 Android 设备都具有足够新的 SQLite,那么您可以尝试从错误消息中提取约束名称。 (该消息可能会在未来版本中更改。)
    • 我按照接受的答案中的建议在 sqlite 中预先存储了每个表的约束,然后检查哪个约束失败。
    猜你喜欢
    • 2019-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-08
    • 2012-04-18
    相关资源
    最近更新 更多