भले ही आपका लूप लूप पूरे ResultSet
. पर पुनरावृति करता हो , फ़ंक्शन केवल FK बाधा में अंतिम कॉलम लौटाएगा क्योंकि प्रत्येक पुनरावृत्ति पर आप पिछले पुनरावृत्ति के मान को अधिलेखित कर देते हैं (fkTableData = rs.getString(i);
) बीटीडब्ल्यू:`fkTableData वास्तव में विधि के लिए एक स्थानीय चर होना चाहिए, न कि एक आवृत्ति चर।
आपके फ़ंक्शन को List<String>
. लौटाना चाहिए String
नहीं है ।
साथ ही:आप कॉल कर रहे हैं getImportedKeys()
प्रत्येक कॉलम के लिए एक बार रिजल्टसेट में। यह बेहद अक्षम है। यदि आप Oracle का उपयोग कर रहे थे तो आप देखेंगे कि तुरंत क्योंकि FK जानकारी प्राप्त करना बहुत धीमा है (सिस्टम कैटलॉग तक पहुँचने पर पोस्टग्रेज़ बहुत तेज़ है)।
getImportedKeys()
. के रूप में प्रत्येक FK कॉलम . के लिए एक पंक्ति लौटाता है आपको उन सभी पंक्तियों को एकत्र करने की भी आवश्यकता है जो एक ही बाधा परिभाषा (यानी एक माता-पिता/बाल तालिका संयोजन के लिए) से संबंधित हैं।
शायद सबसे अच्छी बात यह होगी कि एक वर्ग को परिभाषित किया जाए PkDefinition
जो सभी शामिल कॉलम और टेबल नामों को शामिल करता है और आपके फ़ंक्शन को List<PkDefinition>
. लौटाता है एक ही परिणाम सेट पंक्ति के लिए एकाधिक कॉल से बचने के लिए।