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 aStatement.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, oROWID
pseudo coluna é retornada como chave. OROWID
pode então ser obtido doResultSet
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.