Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用SpringJDBC获取SQL插入后生成的密钥_Java_Sql_Spring_Oracle_Jdbc - Fatal编程技术网

Java 使用SpringJDBC获取SQL插入后生成的密钥

Java 使用SpringJDBC获取SQL插入后生成的密钥,java,sql,spring,oracle,jdbc,Java,Sql,Spring,Oracle,Jdbc,在将新行插入数据库表后,我尝试检索生成的键。我试图用一个钥匙夹和一份准备好的声明来实现这一点,但得到了以下例外: org.springframework.dao.DataRetrievalFailureException: 生成的键不是受支持的数字类型。 无法将[oracle.sql.ROWID]强制转换为[java.lang.Number] 因此,JDBCTemplate的update方法似乎返回了行id,这不是我想要实现的。以下是我为此编写的代码: String sql = Sql.CREA

在将新行插入数据库表后,我尝试检索生成的键。我试图用一个钥匙夹和一份准备好的声明来实现这一点,但得到了以下例外:

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 (?, ?, ?)
这是:

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

添加sql语句。