当前位置: 首页 > 面试题库 >

捕获重复的密钥插入异常

罗韬
2023-03-14
问题内容

我有一个带有唯一主键列的表id。有时,当我执行INSERT查询时会收到错误消息,因为该id值已被使用。

我可以使用try和捕获此特定错误catch吗?


问题答案:

看起来mysql为重复的主键抛出了1062错误代码。您可以检查sql异常的错误代码:

public static final int MYSQL_DUPLICATE_PK = 1062;

try{
    //code that throws sql exception
} catch(SQLException e){
    if(e.getErrorCode() == MYSQL_DUPLICATE_PK ){
        //duplicate primary key 
    }
}

注意,这种方法不是跨数据库供应商的,因为不同的供应商对于重复的PK可能具有不同的错误代码。



 类似资料:
  • 我在PostgreSQL中有一个表,它有许多记录和唯一的键 然后我从Excel导入数据并将其映射到列表。最后,我有一些像 包裹包含大约20,000条记录,并且可以包含违反唯一约束的记录。在这种情况下,我需要跳过该记录并继续插入。 现在我得到了一个预期的错误 微软EntityFrameworkCore。DbUpdateException:更新条目时出错。有关详细信息,请参见内部异常--- 如何忽略它

  • 好的,这个问题不是关于如何返回ID,而是更像是如何跳过它...我有一种情况,我使用last_insert_id()获取最后插入的行的id,但如果没有插入行,我希望得到一个零。问题如下: I INSERT...UPDATE一些记录:由于行是新插入的,因此返回所有ID 然后重复这个过程:这一次不返回ID。耶!这正是我想要的 我更改了一个列值并重复该过程:但现在返回了我更改了列值的行的ID。这让我很生气

  • 问题内容: 我如何捕获此异常: 问题答案: 我用弹簧,所以我们通过 但是就像@KevinGuancheDarias提到的那样: 请注意,虽然这可行。 我建议通过在save之前发出findBy来解决该问题 ,因为这很麻烦,我认为不保证它将在将来的版本中使用,甚至可能在没有通知的情况下中断。

  • 如何捕获此异常:

  • 无法在中包装流对象。 我试过这样: Eclipse开始抱怨在下划线,并建议它需要用try/catch包围

  • 问题内容: 我到处搜寻,但是没有找到可能。 我有这个MySQL查询: 字段ID具有“唯一索引”,因此不能有两个。现在,如果数据库中已经存在相同的ID,我想对其进行更新。但是我真的必须再次指定所有这些字段,例如: 要么: 我已经在插入中指定了所有内容… 需要特别说明的是,我想使用变通方法来获取ID! 我希望有人能告诉我最有效的方法是什么。 问题答案: 没有其他方法,我必须两次指定所有内容。首先是插入