sql >> Database >  >> RDS >> Oracle

Waarom ongeldige conversie aangevraagd FOUTCODE:17132?

De Oracle JDBC-documentatie zegt:

Als sleutelkolommen niet expliciet worden aangegeven, kunnen Oracle JDBC-stuurprogramma's niet identificeren welke kolommen moeten worden opgehaald. Wanneer een kolomnaam of kolomindexarray wordt gebruikt, kunnen Oracle JDBC-stuurprogramma's identificeren welke kolommen automatisch gegenereerde sleutels bevatten die u wilt ophalen. Wanneer echter de Statement.RETURN_GENERATED_KEYS integer-vlag wordt gebruikt, kunnen Oracle JDBC-stuurprogramma's deze kolommen niet identificeren. Wanneer de integer-vlag wordt gebruikt om aan te geven dat automatisch gegenereerde sleutels moeten worden geretourneerd, wordt de ROWID pseudo-kolom wordt geretourneerd als sleutel. De ROWID kan vervolgens worden opgehaald uit de ResultSet object en kan worden gebruikt om andere kolommen op te halen.

U specificeert de kolommen niet (zoals weergegeven in hun voorbeeldcode), dus u haalt de ROWID op; proberen om dat te krijgen met getInt() veroorzaakt de fout die u ziet. (Ik zie eigenlijk Invalid column type: getInt not implemented for class oracle.jdbc.driver.RowidAccessor ERROR CODE: 17004 maar ik denk dat dat te maken heeft met een andere driverversie).

U moet de kolom opgeven die de automatisch gegenereerde waarde krijgt. Als het MEETING_ID . heet dan zou je doen:

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

... de reeks kolommen doorgeven - in dit geval slechts één - in plaats van de RETURN_GENERATED_KEYS-vlag.

De rs.getInt(1) zal dan die numerieke waarde ophalen.




  1. Beheer MDF-bestanden in SQL Server 2019

  2. ASIN() Voorbeelden in SQL Server

  3. Spark-dataframes UPSERT naar Postgres-tabel

  4. 4 manieren om de tijdzone in Oracle te wijzigen