【问题标题】:How to get error code of SQLiteConstraintException in Java如何在 Java 中获取 SQLiteConstraintException 的错误代码
【发布时间】:2025-12-28 18:40:11
【问题描述】:

我正在尝试专门为 code 19 捕获以下异常。 有什么方法可以获取 SQLiteConstraintException 的 the error code 吗?还是我应该简单地对消息描述进行“包含”检查?

03-24 14:46:45.430:W/System.err(2219):android.database.sqlite.SQLiteConstraintException:主键必须是唯一的(代码 19)

        try {
            res = database.insertOrThrow(EMP_TABLE, null, values);      
        } catch (android.database.sqlite.SQLiteConstraintException e) {
             e.printStackTrace();
             //something like e.getErrorCode(); }

我的解决方法是;

    if(e.getMessage().contains("code 19"))
      Log.d(TAG, "Key Already exists !");

【问题讨论】:

  • 不是捕获异常,而是检查给定的行是否已经存在。那么你就不必处理异常了。
  • 我该如何检查?通过另一个 sql 语句?
  • 你为什么需要那个?您可以使用 res = database.insert(EMP_TABLE, null, values);你不会得到任何例外。您只需要检查 res 的值。如果是 -1 则有一些错误,否则没有。
  • 我需要知道密钥是否已经存在,以便我会提示用户是否要更新行。
  • @shamaleyte 没错,通过另一个 sql 查询。请在*.com/questions/20415309/… 线程中找到更多信息。

标签: java android sqlite exception


【解决方案1】:

由于它不能作为方法使用,因此您无法直接检索它,您必须搜索它,或者创建自己的扩展 SQLiteConstraintException 的异常,但无论如何您都必须搜索它。如果您担心性能,可以改用indexOf("code 19")

但是根据您要执行的操作,就代码清晰度和流程而言,最好在尝试插入密钥之前实际检查密钥是否存在并专门针对该异常处理异常。

【讨论】:

  • 为了提供解决方案的替代方案,即使无法获取错误代码,我也会接受您的回答。也归功于@jakubbialkowski