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) तब वह अंकीय मान प्राप्त कर रहा होगा।