通过jdbctemplate从sql插入的标识

3mpgtkmj  于 2021-07-05  发布在  Java
关注(0)|答案(4)|浏览(316)

是否可以从spring jdbc模板调用的sql插入中获取@标识?如果是,怎么做?

gk7wooem

gk7wooem1#

怎么样 SimpleJdbcInsert.executeAndReturnKey ? 它有两种形式,具体取决于输入:

(1) 输入是一个Map public java.lang.Number executeAndReturnKey(java.util.Map<java.lang.String,?> args) 从接口复制的说明: SimpleJdbcInsertOperations 使用传入的值执行insert并返回生成的键。这要求已指定具有自动生成键的列的名称。此方法将始终返回 KeyHolder 但是调用者必须验证它实际上包含生成的密钥。

指定人: executeAndReturnKey 接口中 SimpleJdbcInsertOperations 参数: args - Map containing column names and corresponding value 退货: the generated key value ###(2) 输入是一个sqlparametersource public java.lang.Number executeAndReturnKey( SqlParameterSource parameterSource) 从接口复制的说明: SimpleJdbcInsertOperations 使用传入的值执行insert并返回生成的键。这要求已指定具有自动生成键的列的名称。此方法将始终返回 KeyHolder 但是调用者必须验证它实际上包含生成的密钥。
指定人: executeAndReturnKey 接口中 SimpleJdbcInsertOperations 参数: parameterSource - SqlParameterSource containing values to use for insert 退货:
生成的键值。

83qze16e

83qze16e2#

向todd.pierzina答案添加详细注解/示例代码

jdbcInsert = new SimpleJdbcInsert(jdbcTemplate);
        jdbcInsert.withTableName("TABLE_NAME").usingGeneratedKeyColumns(
                "Primary_key");
        Map<String, Object> parameters = new HashMap<>();
        parameters.put("Column_NAME1", bean.getval1());
        parameters.put("Column_NAME2", bean.getval2());
        // execute insert
        Number key = jdbcInsert.executeAndReturnKey(new MapSqlParameterSource(
                parameters));
           // convert Number to Int using ((Number) key).intValue()
            return ((Number) key).intValue();
oxiaedzo

oxiaedzo3#

这个 JDBCTemplate.update 方法重载以获取名为generatedkeyholder的对象,您可以使用该对象检索自动生成的密钥。例如(代码取自此处):

final String INSERT_SQL = "insert into my_test (name) values(?)";
final String name = "Rob";
KeyHolder keyHolder = new GeneratedKeyHolder();
jdbcTemplate.update(
    new PreparedStatementCreator() {
        public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
            PreparedStatement ps =
                connection.prepareStatement(INSERT_SQL, new String[] {"id"});
            ps.setString(1, name);
            return ps;
        }
    },
    keyHolder);
// keyHolder.getKey() now contains the generated key
1cosmwyk

1cosmwyk4#

我不知道是否有一个“一行程序”,但这似乎做到了诀窍(至少对于mssql):

// -- call this after the insert query...
this._jdbcTemplate.queryForInt( "select @@identity" );

这里的文章不错。

相关问题