Tài liệu Oracle JDBC cho biết:
Nếu các cột chính không được chỉ định rõ ràng, thì trình điều khiển Oracle JDBC không thể xác định cột nào cần được truy xuất. Khi tên cột hoặc mảng chỉ mục cột được sử dụng, trình điều khiển Oracle JDBC có thể xác định cột nào chứa khóa được tạo tự động mà bạn muốn truy xuất. Tuy nhiên, khi
Statement.RETURN_GENERATED_KEYS
cờ số nguyên được sử dụng, trình điều khiển Oracle JDBC không thể xác định các cột này. Khi cờ số nguyên được sử dụng để chỉ ra rằng các khóa được tạo tự động sẽ được trả lại, thìROWID
cột giả được trả về dưới dạng khóa.ROWID
sau đó có thể được tìm nạp từResultSet
đối tượng và có thể được sử dụng để truy xuất các cột khác.
Bạn không chỉ định các cột (như được hiển thị trong mã mẫu của chúng) nên bạn đang truy xuất ROWID
; cố gắng đạt được điều đó với getInt()
đang gây ra lỗi mà bạn thấy. (Tôi thực sự thấy Invalid column type: getInt not implemented for class oracle.jdbc.driver.RowidAccessor ERROR CODE: 17004
nhưng tôi nghĩ đó là phiên bản trình điều khiển khác).
Bạn cần chỉ định cột nhận giá trị được tạo tự động. Nếu nó được gọi là MEETING_ID
thì bạn sẽ làm:
String returnCols[] = { "MEETING_ID" };
preparedStatement = dbConnection.prepareStatement(insertTableSQL, returnCols);
... truyền mảng cột - chỉ một cột trong trường hợp này - chứ không phải cờ RETURN_GENERATED_KEYS.
rs.getInt(1)
sau đó sẽ truy xuất giá trị số đó.