Oracle
 sql >> Database >  >> RDS >> Oracle

Perché è stata richiesta una conversione non valida CODICE DI ERRORE:17132?

La documentazione Oracle JDBC dice:

Se le colonne chiave non sono indicate in modo esplicito, i driver Oracle JDBC non possono identificare quali colonne devono essere recuperate. Quando viene utilizzato un nome di colonna o un array di indice di colonna, i driver Oracle JDBC possono identificare quali colonne contengono chiavi generate automaticamente che si desidera recuperare. Tuttavia, quando il Statement.RETURN_GENERATED_KEYS viene utilizzato il flag intero, i driver Oracle JDBC non possono identificare queste colonne. Quando il flag intero viene utilizzato per indicare che le chiavi generate automaticamente devono essere restituite, il ROWID la pseudo colonna viene restituita come chiave. Il ROWID può essere quindi recuperato da ResultSet oggetto e può essere utilizzato per recuperare altre colonne.

Non stai specificando le colonne (come mostrato nel loro codice di esempio), quindi stai recuperando il ROWID; cercando di ottenerlo con getInt() sta causando l'errore che vedi. (Vedo effettivamente Invalid column type: getInt not implemented for class oracle.jdbc.driver.RowidAccessor ERROR CODE: 17004 ma penso che dipenda da una versione del driver diversa).

È necessario specificare la colonna che ottiene il valore generato automaticamente. Se si chiama MEETING_ID allora faresti:

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

... passando l'array di colonne - solo una in questo caso - invece del flag RETURN_GENERATED_KEYS.

Il rs.getInt(1) recupererà quindi quel valore numerico.