Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Por que a conversão inválida solicitada CÓDIGO DE ERRO:17132?


A documentação do Oracle JDBC diz:

Se as colunas de chave não forem indicadas explicitamente, os drivers JDBC do Oracle não poderão identificar quais colunas precisam ser recuperadas. Quando um nome de coluna ou matriz de índice de coluna é usado, os drivers Oracle JDBC podem identificar quais colunas contêm chaves geradas automaticamente que você deseja recuperar. No entanto, quando a Statement.RETURN_GENERATED_KEYS inteiro for usado, os drivers Oracle JDBC não poderão identificar essas colunas. Quando o sinalizador de inteiro é usado para indicar que as chaves geradas automaticamente devem ser retornadas, o ROWID pseudo coluna é retornada como chave. O ROWID pode então ser obtido do ResultSet objeto e pode ser usado para recuperar outras colunas.

Você não está especificando as colunas (como mostrado no código de exemplo), então está recuperando o ROWID; tentando obter isso com getInt() está causando o erro que você vê. (Na verdade, vejo Invalid column type: getInt not implemented for class oracle.jdbc.driver.RowidAccessor ERROR CODE: 17004 mas acho que isso se deve a uma versão diferente do driver).

Você precisa especificar a coluna que obtém o valor gerado automaticamente. Se for chamado MEETING_ID então você faria:
    String returnCols[] = { "MEETING_ID" };
    preparedStatement = dbConnection.prepareStatement(insertTableSQL, returnCols);

... passando a matriz de colunas - apenas uma neste caso - em vez do sinalizador RETURN_GENERATED_KEYS.

O rs.getInt(1) estará então recuperando esse valor numérico.