我正在使用mySQL数据库,并且该表具有由数据库引擎生成的UUID格式的主键。我正在使用Spring框架 JdbcTemplate (https://docs.spring.io/spring/docs/current/javadoc-api/index.html?org/springframework/jdbc/core/JdbcTemplate.html)来执行所有操作。但是在插入时,我确实需要将主键返回给调用者。 JdbcTemplate 具有方法 公共int更新(PreparedStatementCreator psc,KeyHolder生成的KeyHolder) 但它仅返回整数键。 KeyHolder 界面也仅允许数字键。 有人知道如何克服这一缺陷吗?我应该使用JdbcTemplate以外的其他东西吗?这是不希望的,但可能的。 请给我一个提示。
答案 0 :(得分:0)
您可以通过这种方式使用它来获取非数字键
[2, 4, 6, 8, 10]
[5, 10]
[]
答案 1 :(得分:0)
这对我有用!
public String save(SysUser sysUser) {
String SQL = "INSERT INTO sys_user(id,account_number,telephone,email,real_name) VALUES (?,?,?,?,?);";
KeyHolder keyHolder = new GeneratedKeyHolder();
jdbcTemplate.update(connection -> {
PreparedStatement preparedStatement = connection.prepareStatement(SQL, new String[]{"id"});
preparedStatement.setString(1, sysUser.getId());
preparedStatement.setString(2, sysUser.getAccountNumber());
preparedStatement.setString(3, sysUser.getTelephone());
preparedStatement.setString(4, sysUser.getEmail());
preparedStatement.setString(5, sysUser.getRealName());
return preparedStatement;
}, keyHolder);
return String.valueOf(keyHolder.getKeyList().get(0).get("id"));
}
答案 2 :(得分:0)
一种实现方法是预先在Java中创建UUID,然后将其传递给(SQL / DB),因此在这种情况下,您已经知道什么将成为主键。因为从理论上讲UUID是唯一的,所以不应该发生冲突。
UUID uuid = UUID.randomUUID();
jdbcTemplate.update("INSERT INTO users ( user_uuid , first_name , last_name) VALUES (?,?,?)",
"admin", uuid, user.getFirstName(), user.getLastName());
//uuid: you already have the PrimeryKey in advance