Dokumentacja Oracle JDBC mówi:
Jeśli kolumny kluczy nie są wyraźnie wskazane, sterowniki Oracle JDBC nie mogą określić, które kolumny należy pobrać. Gdy używana jest nazwa kolumny lub tablica indeksów kolumn, sterowniki Oracle JDBC mogą określić, które kolumny zawierają automatycznie wygenerowane klucze, które chcesz pobrać. Jednak gdy Statement.RETURN_GENERATED_KEYS
używana jest flaga liczby całkowitej, sterowniki Oracle JDBC nie mogą zidentyfikować tych kolumn. Gdy flaga liczby całkowitej jest używana do wskazania, że mają zostać zwrócone automatycznie wygenerowane klucze, ROWID
pseudokolumna jest zwracana jako klucz. ROWID
można następnie pobrać z ResultSet
obiekt i może być używany do pobierania innych kolumn.
Nie określasz kolumn (jak pokazano w ich przykładowym kodzie), więc pobierasz ROWID
; próbując to uzyskać za pomocą getInt()
powoduje błąd, który widzisz. (Właściwie widzę Invalid column type: getInt not implemented for class oracle.jdbc.driver.RowidAccessor ERROR CODE: 17004
ale myślę, że to zależy od innej wersji sterownika).
Musisz określić kolumnę, która otrzyma automatycznie wygenerowaną wartość. Jeśli nazywa się MEETING_ID
wtedy byś zrobił:
String returnCols[] = { "MEETING_ID" };
preparedStatement = dbConnection.prepareStatement(insertTableSQL, returnCols);
... przekazując tablicę kolumn - w tym przypadku tylko jedną - zamiast flagi RETURN_GENERATED_KEYS.
rs.getInt(1)
będzie wtedy pobierać tę wartość liczbową.