sql >> Base de Datos >  >> RDS >> Oracle

¿Por qué se solicitó una conversión no válida CÓDIGO DE ERROR:17132?

La documentación de Oracle JDBC dice:

Si las columnas clave no se indican explícitamente, los controladores Oracle JDBC no pueden identificar qué columnas deben recuperarse. Cuando se utiliza un nombre de columna o una matriz de índice de columna, los controladores JDBC de Oracle pueden identificar qué columnas contienen claves generadas automáticamente que desea recuperar. Sin embargo, cuando Statement.RETURN_GENERATED_KEYS se utiliza el indicador de número entero, los controladores JDBC de Oracle no pueden identificar estas columnas. Cuando se utiliza el indicador de número entero para indicar que se devolverán las claves generadas automáticamente, el ROWID la pseudocolumna se devuelve como clave. El ROWID luego se puede obtener del ResultSet objeto y se puede utilizar para recuperar otras columnas.

No está especificando las columnas (como se muestra en su código de muestra), por lo que está recuperando el ROWID; tratando de obtener eso con getInt() está causando el error que ves. (En realidad veo Invalid column type: getInt not implemented for class oracle.jdbc.driver.RowidAccessor ERROR CODE: 17004 pero creo que eso se debe a una versión diferente del controlador).

Debe especificar la columna que obtiene el valor generado automáticamente. Si se llama MEETING_ID entonces harías:

    String returnCols[] = { "MEETING_ID" };
    preparedStatement = dbConnection.prepareStatement(insertTableSQL, returnCols);

... pasando la matriz de columnas, solo una en este caso, en lugar del indicador RETURN_GENERATED_KEYS.

El rs.getInt(1) luego recuperará ese valor numérico.