Dokumentasi Oracle JDBC mengatakan:
Jika kolom kunci tidak secara eksplisit ditunjukkan, maka driver Oracle JDBC tidak dapat mengidentifikasi kolom mana yang perlu diambil. Saat nama kolom atau larik indeks kolom digunakan, driver Oracle JDBC dapat mengidentifikasi kolom mana yang berisi kunci yang dibuat secara otomatis yang ingin Anda ambil. Namun, ketika
Statement.RETURN_GENERATED_KEYS
Jika flag integer digunakan, driver Oracle JDBC tidak dapat mengidentifikasi kolom ini. Ketika flag integer digunakan untuk menunjukkan bahwa kunci yang dibuat secara otomatis akan dikembalikan,ROWID
kolom pseudo dikembalikan sebagai kunci.ROWID
kemudian dapat diambil dariResultSet
objek dan dapat digunakan untuk mengambil kolom lain.
Anda tidak menentukan kolom (seperti yang ditunjukkan dalam kode sampelnya) sehingga Anda mengambil ROWID
; mencoba mendapatkannya dengan getInt()
menyebabkan kesalahan yang Anda lihat. (Saya benar-benar melihat Invalid column type: getInt not implemented for class oracle.jdbc.driver.RowidAccessor ERROR CODE: 17004
tapi saya pikir itu tergantung pada versi driver yang berbeda).
Anda perlu menentukan kolom yang mendapatkan nilai yang dihasilkan secara otomatis. Jika disebut MEETING_ID
maka Anda akan melakukan:
String returnCols[] = { "MEETING_ID" };
preparedStatement = dbConnection.prepareStatement(insertTableSQL, returnCols);
... melewati larik kolom - hanya satu dalam kasus ini - daripada flag RETURN_GENERATED_KEYS.
rs.getInt(1)
kemudian akan mengambil nilai numerik tersebut.