在spring中的DuplicateKeyException之后是否可以获取一个键值?

Is it possible to get a key value after DuplicateKeyException in spring?

我想知道是否可以在spring中的DuplicateKeyException之后获取一个值的键?

例如像这样:

    try {
        KeyHolder keyHolder = new GeneratedKeyHolder();
        getJdbcTemplate().update(
                new PreparedStatementCreator() {
                    @Override
                    public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
                        PreparedStatement ps = con.prepareStatement(SQL, new String[]{"ID"});
                        ps.setString(1, user.getUSERNAME());
                        ps.setString(2, user.getEMAIL());
                        return ps;
                    }
                },
                keyHolder);

        logger.info("Insert success");
        return (BigDecimal) keyHolder.getKey();
    } catch (DuplicateKeyException dke) {
        logger.info("Insert failed");
        // get key and do sth with it

        return new BigDecimal(-1);
    }

欢迎提出任何建议。

我没有看到这个问题的最佳解决方案。尝试这样的事情:

  1. 预选 - Select 所有值计数。 (如果您对邮件有约束,请检查邮件是否存在。如果您对名称有另一个约束,请检查该名称是否存在。(SELECT COUNT(name) FROM table WHERE name='SOME_NAME')您可以在遇到 DuplicateKeyException 之前或之后执行此操作.
  2. Extraction - 尝试从 Exception-Message 中提取导致问题的列(这很脏)。在这种情况下,您不必执行多个查询。