gpt4 book ai didi

java - 插入行并获取生成的 ID

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:45:48 25 4
gpt4 key购买 nike

我正在尝试使用 Spring 的 JdbcTemplate 类将一行插入到名为 transaction 的 MySQL 表中并获取生成的 ID。相关代码为:

public Transaction insertTransaction(final Transaction tran) {

// Will hold the ID of the row created by the insert
KeyHolder keyHolder = new GeneratedKeyHolder();

getJdbcTemplate().update(new PreparedStatementCreator() {
public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {

PreparedStatement ps = connection.prepareStatement(INSERT_TRAN_SQL);
ps.setString(1, tran.getTransactionType().toString());

Date sqlDate = new Date(tran.getDate().getTime());
ps.setDate(2, sqlDate);
ps.setString(3, tran.getDescription());

return ps;
}
}, keyHolder);

tran.setId(keyHolder.getKey().longValue());
return tran;
}

但是调用getJdbcTemplate().update会抛出下面的异常

java.sql.SQLException: Generated keys not requested. You need to specify Statement.RETURN_GENERATED_KEYS to Statement.executeUpdate() or Connection.prepareStatement().

我可以在不放弃 JdbcTemplate 的情况下插入行并获取生成的 ID 吗?我正在使用 Spring 2.5、MySQL 5.5.27 和 MySQL Connector 5.1.26。

最佳答案

有一种更简单的方法可以实现这种行为:

protected JdbcTemplate            jdbcTemplate;
private SimpleJdbcInsert insert;

this.jdbcTemplate = new JdbcTemplate(this.databaseSetup.getDataSource());
this.insert = new SimpleJdbcInsert(this.jdbcTemplate).withTableName(this.tableName).usingGeneratedKeyColumns(this.pkColumn);

然后创建一个名为 parameters 的 Map,其中包含表中每个列名的值,并插入如下记录:

    final Map<String, Object> parameters = new HashMap<>();
parameters.put("empName", employee.getName()); // store the String name of employee in the column empName
parameters.put("dept", employee.getDepartment()); // store the int (as Integer) of the employee in the column dept
final Number key = this.insert.executeAndReturnKey(parameters);
final long pk = key.longValue();

关于java - 插入行并获取生成的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19095994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com