Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Warum wurde eine ungültige Konvertierung angefordert FEHLERCODE:17132?

Die Oracle JDBC-Dokumentation sagt:

Wenn Schlüsselspalten nicht explizit angegeben werden, können Oracle JDBC-Treiber nicht erkennen, welche Spalten abgerufen werden müssen. Wenn ein Spaltenname oder ein Spaltenindexarray verwendet wird, können Oracle JDBC-Treiber erkennen, welche Spalten automatisch generierte Schlüssel enthalten, die Sie abrufen möchten. Wenn jedoch Statement.RETURN_GENERATED_KEYS Integer-Flag verwendet wird, können Oracle JDBC-Treiber diese Spalten nicht identifizieren. Wenn das Integer-Flag verwendet wird, um anzugeben, dass automatisch generierte Schlüssel zurückgegeben werden sollen, wird die ROWID Pseudo-Spalte wird als Schlüssel zurückgegeben. Die ROWID kann dann aus dem ResultSet geholt werden Objekt und kann verwendet werden, um andere Spalten abzurufen.

Sie geben die Spalten nicht an (wie in ihrem Beispielcode gezeigt), also rufen Sie die ROWID ab; versuchen, das mit getInt() zu bekommen verursacht den Fehler, den Sie sehen. (Ich sehe tatsächlich Invalid column type: getInt not implemented for class oracle.jdbc.driver.RowidAccessor ERROR CODE: 17004 aber ich denke das liegt an einer anderen Treiberversion).

Sie müssen die Spalte angeben, die den automatisch generierten Wert erhält. Wenn es MEETING_ID heißt dann würden Sie Folgendes tun:

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

... Übergeben des Arrays von Spalten - in diesem Fall nur eine - anstelle des RETURN_GENERATED_KEYS-Flags.

Der rs.getInt(1) wird dann diesen numerischen Wert abrufen.