La documentation Oracle JDBC indique :
Si les colonnes de clé ne sont pas explicitement indiquées, les pilotes Oracle JDBC ne peuvent pas identifier les colonnes à récupérer. Lorsqu'un tableau de nom de colonne ou d'index de colonne est utilisé, les pilotes Oracle JDBC peuvent identifier les colonnes contenant des clés générées automatiquement que vous souhaitez récupérer. Cependant, lorsque la
Statement.RETURN_GENERATED_KEYS
indicateur d'entier est utilisé, les pilotes Oracle JDBC ne peuvent pas identifier ces colonnes. Lorsque l'indicateur entier est utilisé pour indiquer que les clés générées automatiquement doivent être renvoyées, leROWID
la pseudo-colonne est renvoyée en tant que clé. LeROWID
peut ensuite être extrait duResultSet
objet et peut être utilisé pour récupérer d'autres colonnes.
Vous ne spécifiez pas les colonnes (comme indiqué dans leur exemple de code), vous récupérez donc le ROWID
; essayer d'obtenir cela avec getInt()
est à l'origine de l'erreur que vous voyez. (Je vois en fait Invalid column type: getInt not implemented for class oracle.jdbc.driver.RowidAccessor ERROR CODE: 17004
mais je pense que c'est dû à une version de pilote différente).
Vous devez spécifier la colonne qui obtient la valeur générée automatiquement. S'il s'appelle MEETING_ID
alors vous feriez :
String returnCols[] = { "MEETING_ID" };
preparedStatement = dbConnection.prepareStatement(insertTableSQL, returnCols);
... en passant le tableau de colonnes - une seule dans ce cas - plutôt que l'indicateur RETURN_GENERATED_KEYS.
Le rs.getInt(1)
récupérera alors cette valeur numérique.