Документацията на Oracle JDBC казва:
Ако ключовите колони не са изрично посочени, тогава драйверите на Oracle JDBC не могат да идентифицират кои колони трябва да бъдат извлечени. Когато се използва име на колона или индекс на колона, драйверите на Oracle JDBC могат да идентифицират кои колони съдържат автоматично генерирани ключове, които искате да извлечете. Когато обаче
Statement.RETURN_GENERATED_KEYS
използва се целочислен флаг, драйверите на Oracle JDBC не могат да идентифицират тези колони. Когато целочисленият флаг се използва за указване, че автоматично генерираните ключове трябва да бъдат върнати,ROWID
псевдо колоната се връща като ключ.ROWID
след това може да бъде извлечен отResultSet
обект и може да се използва за извличане на други колони.
Не посочвате колоните (както е показано в примерния им код), така че извличате ROWID
; опитвайки се да го получите с getInt()
причинява грешката, която виждате. (Всъщност виждам Invalid column type: getInt not implemented for class oracle.jdbc.driver.RowidAccessor ERROR CODE: 17004
но мисля, че това се дължи на различна версия на драйвера).
Трябва да посочите колоната, която получава автоматично генерираната стойност. Ако се нарича MEETING_ID
тогава бихте направили:
String returnCols[] = { "MEETING_ID" };
preparedStatement = dbConnection.prepareStatement(insertTableSQL, returnCols);
... подаване на масива от колони – само една в този случай – вместо флага RETURN_GENERATED_KEYS.
rs.getInt(1)
след това ще извлече тази числова стойност.