捕获重复条目异常

2022-09-01 07:32:29

我怎么能抓住这个例外:

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: 
                                      Duplicate entry '22-85' for key 'ID_CONTACT'

答案 1

我使用弹簧,所以我们通过以下方式解决它org.springframework.dao.DataIntegrityViolationException

try {
    ao_history_repository.save(new AoHistory(..));
} catch (DataIntegrityViolationException e) {
    System.out.println("history already exist");
}

但正如@KevinGuancheDarias提到的那样:

请注意,虽然这有效。我建议通过在保存之前发布一个findBy来解决问题,因为这是混乱的,而且我认为不能保证它将在将来的版本中工作,甚至可能在没有通知的情况下中断。


答案 2

catch SQLIntegrityConstraintViolationException,如果您使用的是 Java 1.6+

例如:

try {
    ps.executeUpdate("INSERT INTO ...");
} catch (SQLIntegrityConstraintViolationException e) {
    // Duplicate entry
} catch (SQLException e) {
    // Other SQL Exception
}

try {
    ps.executeUpdate("INSERT INTO ...");
} catch (SQLException e) {
    if (e instanceof SQLIntegrityConstraintViolationException) {
        // Duplicate entry
    } else {
        // Other SQL Exception
    }
}

推荐