我正在使用jooq对auroramysql执行crud操作。
我有以下场景:
如果由于重复密钥异常导致插入失败,请再次重试相同的操作,否则忽略该异常。
如果插入失败,则在满足条件时更新记录。
有 有什么方法只捕获重复的keyexception吗?jooq正在将异常作为dataaccessexception抛出。
在启用onduplicatekeyupdate时,如果记录存在,它似乎会盲目地更新数据库中的记录。我的用例是,如果数据库中存在记录,那么在满足更新条件的情况下更新记录。
我可以在两个单独的insert和update调用中完成,但是有没有方法不能在一个调用中完成呢?
谢谢!!
1条答案
按热度按时间watbbzwu1#
你的问题有两个问题:
有没有办法只捕获重复的keyexception?jooq正在将异常作为dataaccessexception抛出。
当然可以。jooq没有针对个别错误(如jdbc)的单独异常类型,但它仍然:
引用jdbc
SQLException
导致了DataAccessException
. 你可以通过dae.getCause()
或者dae.getCause(SQLException.class)
,后者在原始的情况下是有用的SQLException
已经包了好几次了。引用
DataAccessException.sqlStateClass()
. 你要找的是SQLStateClass.C23_INTEGRITY_CONSTRAINT_VIOLATION
. 如果您的jdbc驱动程序在其异常中传播sql state类,那么您可以通过jooq获得这些信息。在启用onduplicatekeyupdate时,如果记录存在,它似乎会盲目地更新数据库中的记录。我的用例是,如果数据库中存在记录,那么在满足更新条件的情况下更新记录。
您可以在
ON DUPLICATE KEY UPDATE
的SET
条款:在上面的例子中
UPDATE
子句将更新value
至3
如果是的话2
.