2
下面是我用来在数据库中保存记录然后获取生成的主键的代码。如何使用Spring JDBC在Oracle数据库中插入新行时检索生成的主键?
public void save(User user) {
// TODO Auto-generated method stub
Object[] args = { user.getFirstname(), user.getLastname(),
user.getEmail() };
int[] types = { Types.VARCHAR, Types.VARCHAR, Types.VARCHAR };
SqlUpdate su = new SqlUpdate();
su.setJdbcTemplate(getJdbcTemplate());
su.setSql(QUERY_SAVE);
setSqlTypes(su, types);
su.setReturnGeneratedKeys(true);
su.compile();
KeyHolder keyHolder = new GeneratedKeyHolder();
su.update(args, keyHolder);
int id = keyHolder.getKey().intValue();
if (su.isReturnGeneratedKeys()) {
user.setId(id);
} else {
throw new RuntimeException("No key generated for insert statement");
}
}
但它不工作,它给我下面的错误。
The generated key is not of a supported numeric type. Unable to cast [oracle.sql.ROWID] to [java.lang.Number]
该行正在被正确插入到数据库中。当使用MS SQL数据库时,我可以得到一般化的主键,但是相同的代码不能与ORACLE 11G一起工作。
请帮忙。
我认为Oracle ROWID可以包含字母。 getKey()方法是否具有stringValue()或类似的东西?或者它是BigInteger还是这样的东西?此外,它似乎是试图将行ID作为关键是错误的事实。 – AHungerArtist 2012-02-22 13:45:11