关于JdbcTemplate插入数据之后返回表主键的问题

最近遇到关于使用Oracle数据库,JdbcTemplate插入数据无法返回主键的问题,如下代码:

KeyHolder keyHolder = new GeneratedKeyHolder();// 创建一个主键持有者
        jdbcTemplate.update(new PreparedStatementCreator() {

            @Override
            public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
                PreparedStatement ps = con.prepareStatement(INSERT_LOG_SQL);
                ps.setString(1, log.getServiceName());
                ps.setInt(2, log.getServiceEventType());
                ps.setString(3, log.getOper_userGuid());
                ps.setString(4, log.getOper_ip());
                ps.setTimestamp(5, Timestamp.valueOf(log.getOper_startTime()));
                ps.setString(6, log.getInParams());
                ps.setString(7, log.getDescription());
                return ps;
            }
        }, keyHolder);
        log.setAutoId(keyHolder.getKey().longValue());

但是单元测试无法通过,报错如下
关于JdbcTemplate插入数据之后返回表主键的问题_第1张图片
百度了一下,有建议在SQL中insert主键,然后value中填入对应的sequence.nextval。但是仍然不成功。
最后发现,需要在此处指定主键

PreparedStatement ps = con.prepareStatement(INSERT_LOG_SQL,new String[]{"AutoId"});

你可能感兴趣的:(Java,数据库)