使用Spring JDBC插入SQL后获取生成的密钥

时间:2017-06-01 08:27:31

标签: java sql spring oracle jdbc

我尝试在将新行插入数据库表后检索生成的密钥。我尝试使用KeyHolderPreparedStatement来实现此目的但是得到了这个例外:

  

org.springframework.dao.DataRetrievalFailureException:
       生成的密钥不是受支持的数字类型         无法将[oracle.sql.ROWID]强制转换为[java.lang.Number]

因此看起来JDBCTemplate的update方法返回行id,这不是我想要实现的。这是我为此写的代码:

String sql = Sql.CREATE_VORGANG;
final KeyHolder holder = new GeneratedKeyHolder();

jdbcTemplate.update(new PreparedStatementCreator() {           

  @Override
  public PreparedStatement createPreparedStatement(Connection connection)
                throws SQLException {
     PreparedStatement ps = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
     ps.setString(1, fuehrungskraftPersonalnummer);
     ps.setString(2, mitarbeiterPersonalnummer);
     ps.setString(3, statusId);
     return ps;
   }
}, holder);

该表使用一个触发器,每次插入新行时,该触发器都会生成一个带序列的新值。该值将插入表的列ID_VORGANG中。

我错过了一些明显的东西吗?

编辑: 执行的SQL语句:

Insert into TRAL_VORGANG (FK_PERSONALNUMMER, MA_PERSONALNUMMER, STATUS_ID) values (?, ?, ?)

1 个答案:

答案 0 :(得分:1)

这是:

long id = holder.getKey().longValue();