Oracle
 sql >> Base de données >  >> RDS >> Oracle

Pourquoi la conversion invalide a-t-elle demandé le CODE D'ERREUR :17132 ?

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, le ROWID la pseudo-colonne est renvoyée en tant que clé. Le ROWID peut ensuite être extrait du ResultSet 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.