在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);
}
欢迎提出任何建议。
我没有看到这个问题的最佳解决方案。尝试这样的事情:
- 预选 - Select 所有值计数。 (如果您对邮件有约束,请检查邮件是否存在。如果您对名称有另一个约束,请检查该名称是否存在。(
SELECT COUNT(name) FROM table WHERE name='SOME_NAME'
)您可以在遇到 DuplicateKeyException 之前或之后执行此操作.
- Extraction - 尝试从 Exception-Message 中提取导致问题的列(这很脏)。在这种情况下,您不必执行多个查询。
我想知道是否可以在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);
}
欢迎提出任何建议。
我没有看到这个问题的最佳解决方案。尝试这样的事情:
- 预选 - Select 所有值计数。 (如果您对邮件有约束,请检查邮件是否存在。如果您对名称有另一个约束,请检查该名称是否存在。(
SELECT COUNT(name) FROM table WHERE name='SOME_NAME'
)您可以在遇到 DuplicateKeyException 之前或之后执行此操作. - Extraction - 尝试从 Exception-Message 中提取导致问题的列(这很脏)。在这种情况下,您不必执行多个查询。