jdbcTemplate-insert时返回主键id

本文介绍如何使用Spring的jdbcTemplate执行SQL插入语句并返回生成的主键ID,通过PreparedStatement设置参数并利用GeneratedKeyHolder捕获自动生成的主键。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

执行insert或update的sql语句时,jdbcTemplate都是返回受影响行数

主要就是重写方法

 PreparedStatement psst = connection.prepareStatement(sql,  new String[] { "c_id" });

c_id写的是你要返回的主键id

psst.setInt(1, MyUtil.getInteger("u_id", params));

主要是预编译用来传值

public int save(Map<String, Object> params) {
        int ret = 0;

        String sql ="INSERT INTO bh_content(u_id,c_title,c_content,c_create_time,c_start_time,c_end_time,c_departement,c_is_voer,c_count) VALUES(?,?,?,NOW(),?,?,2,0,0);";
        
        String sql2 =  "INSERT INTO bh_user_content(u_id,c_id,uc_look,uc_start,d_id,uc_create_time) VALUES(?,?,0,0,?,NOW())";
        try {
             GeneratedKeyHolder keyHolder = new GeneratedKeyHolder();
             int insert =jdbcTemplate.update(new PreparedStatementCreator() {
                @Override
                public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
                    PreparedStatement psst = connection.prepareStatement(sql,  new String[] { "c_id" });
                    psst.setInt(1, MyUtil.getInteger("u_id", params));
                    psst.setString(2, MyUtil.getString("c_title", params));
                    psst.setString(3, MyUtil.getString("c_content", params));
                    psst.setString(4, MyUtil.getString("c_start_time", params));
                    psst.setString(5, MyUtil.getString("c_end_time", params));
                    return psst;
                }
            }, keyHolder);

            if(insert > 0){
                ret = jdbcTemplate.update(sql2,new Object[]{params.get("u_id"),keyHolder.getKey().longValue(),params.get("d_id")});
            }
            
        } catch (Exception e) {
            SystemPrint.a_println(e);
            log.error(e.getMessage());
        }
        return ret;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值