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_KEYSJika 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,ROWIDkolom pseudo dikembalikan sebagai kunci.ROWIDkemudian dapat diambil dariResultSetobjek 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.