java - JooQ 中的 DuplicateKeyException

标签 java mysql sql jooq amazon-aurora

我正在使用 JooQ 在 Aurora MySQL 上执行 CRUD 操作。

我有以下情况:

  1. 如果由于重复键异常导致插入失败,则再次重试相同的操作,否则忽略该异常。
  2. 如果插入失败,则在满足条件的情况下更新记录。

有没有办法只捕获 DuplicateKeyException? JooQ 正在抛出 DataAccessException 异常。

启用OnDuplicateKeyUpdate后,如果记录存在,它似乎会盲目更新数据库中的记录。我的用例是如果记录存在于数据库中,则在满足更新条件时更新记录。

我可以在两次单独的插入和更新调用中做到这一点,但是有什么方法可以在单个调用中做到这一点吗?

谢谢!!

最佳答案

您的问题中有两个问题:

Is there any way to catch DuplicateKeyException only? JooQ is throwing exception as DataAccessException.

是的,当然。 jOOQ 不像 JDBC 那样为单个错误提供单独的异常类型,但它仍然:

On enabling OnDuplicateKeyUpdate, it seems that if the record exist it will blindly update the record in database. My use case is if the record exist in database then update the record if the update conditions are met.

您可以在 ON DUPLICATE KEY UPDATESET 子句中对更新条件进行编码:

INSERT INTO t (id, value)
VALUES (1, 2)
ON DUPLICATE KEY UPDATE SET
  value = CASE WHEN value = 2 THEN 3 ELSE value END

在上面的示例中,仅当 value2 时,UPDATE 子句才会将其更新为 3

关于java - JooQ 中的 DuplicateKeyException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53518213/

相关文章:

mysql - Hangfire MySqlStorage - HttpConfiguration 不包含 'UseStorage' 的定义

sql - 如何在 Postgres 中将表列数据从 'LastName, FirstName' 转换为 'FirstName LastName'

sql - SQL中如何对多列求和

sql - 具有窗口函数滞后的 Postgres 组结果返回 0 行

java - Java中的不对称最近邻

java - 解释一下用JAVA写的这一行

java - 有没有办法让查询在 eclipselink 中触发

java - GWT:带有按钮单击的往返示例

php - 将内容保存到 mysql 数据库时出现撇号 "'“问题

mysql - WikkaWiki 1.3.3 版本中,为什么安装脚本无法创建数据库表?