在Spring中DuplicateKeyException之后是否可以获取键值?

时间:2015-01-23 08:51:58

标签: spring exception

我想知道在春天的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 个答案:

答案 0 :(得分:0)

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

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