Wednesday 15 April 2015

java - If exist return id else insert in postgres -


इस सवाल का पहले से ही एक उत्तर है: < / P>

  • 16 उत्तर

    मैं पोस्टग्रे के लिए नया हूँ और मुझे इसका इस्तेमाल करते हुए डेटाबेस को आबाद करना पड़ रहा है मैं संदर्भ के लिए अपना वास्तविक कोड सबमिट नहीं कर सकता, लेकिन मेरा प्रोग्राम जावा में है और मैं इन पंक्तियों के साथ कुछ करने की कोशिश कर रहा हूं।

      यदि मौजूदा है (चयन 1 से जहां फूड = 2 और बार = 3) शुरू से परीक्षण का चयन करें, जहां फूड = 2 और बार = 3 अंत में परीक्षण शुरू करें (फ़ू, बार) मूल्य (2, 3) END   

    मैं करने की कोशिश कर रहा हूँ इन पंक्तियों के साथ कुछ क्योंकि मेरा कार्यक्रम केवल फाइलों का एक समूह पार्स करना और डेटाबेस को पॉपुलिंग करना है मुझे यह सुनिश्चित करने की ज़रूरत है कि यदि कोई व्यक्ति वापस चलाए और उसी फाइल पर फिर से कार्यक्रम चलाता है जिसमें डाटाबेस में डुप्लिकेट प्रविष्टियां नहीं होतीं इस डालने / रिकॉर्ड के साथ जुड़े आईडी को एक लिंकिंग टेबल को पॉप्युलेट करने के लिए उपयोग किया जाता है मैं इस उदाहरण को एक और स्टैक ओवरफ्लो प्रश्नों पर पाया जो केवल माइक्रोसॉफ्ट एसक्यूएल सर्वर 2005 से संबंधित है। मैं पोस्टग्रेड्स का उपयोग कर रहा हूं और यह IF पर पहली पंक्ति में विफल रहता है। मैं समझता हूं कि विभिन्न डेटाबेस भाषाओं थोड़ा अलग कार्य करते हैं क्या एक तरीका है कि यदि रिकॉर्ड्स आईडी को पोस्टग्रेजेस के जरिए इस्तेमाल किया जाए।

    वर्तमान में मैं जांच कर रहा हूं कि प्रविष्टि मौजूद है और यदि वह सम्मिलित नहीं है लेकिन फिर मुझे डेटाबेस को पुनः रिकॉर्ड करने के लिए आईडी का रिकॉर्ड प्राप्त करने के लिए क्वेरी हो रहा है।

      int id = 0; PrepareStatement ps = conn.prepare (SQL कमांड, statement.generatekeys); // सिंटैक्स प्रीपेरेटेटमेंट के लिए सही नहीं है, लेकिन मैं अपने कोड को नहीं देख रहा हूं और मेरे सिर के ऊपर इसे याद नहीं रखता हूं। परिणामसेट rs = ps.executeUpdate (); यदि (rsnext ()) {if (rs.getgeneratedKeys ()। Rows () & gt; 0) // मेरे कोड पर बैठा नहीं है लेकिन यह जांचने का एक तरीका है कि क्या एक डालने आईडी = GetGeneratedKeys ()} अन्य {id = rs.getInt (1); }}   

    अपडेट टिप्पणियों से लिया गया:

    बेहतर प्रश्न हैं क्या ऐसा करने का कोई तरीका है कि मौजूद आईडी मौजूद है अन्यथा बिना किसी प्रश्न के दो बार पूछताछ / जांच के बिना डालें।

    मैं मौजूदा कोड या नए से अपना आईडी प्राप्त करने के लिए दो बार जांच कर WHERE प्रवेश। मेरी स्थिति की जांच काफी लंबी है क्योंकि मेरी कुछ टेबल 14 विशेषताओं के ऊपर हैं वर्तमान में मैं क्या करता हूं, डेटाबेस को एक बार एक INSERT कर रहा है, यदि मौजूद नहीं है यदि मेरा getGeneratedKeys ()। आकार () = 0 मुझे पता है कि INSERT असफल रहा है क्योंकि यह मौजूद है और फिर मैं उसी डेटाबेस से दोबारा क्वेरी करता हूं जहां मेरी मूल क्वेरी से खंड और आईडी को पकड़ो।

    यह एक UPSERT या < कोड> मर्ज ऑपरेशन, जो सीधे समर्थित नहीं है PostgreSQL अपसर्ट एक समवर्ती वातावरण में अपेक्षाकृत अधिक जटिल है,

    ऊपर उठने वाली अधिकांश सांसदीय समस्याएं भी उस पर लागू होती हैं जो आप करना चाहते हैं। आपका वर्तमान कोड एक समय से अद्यतन करने के लिए एक से अधिक थ्रेड की उपस्थिति में पूरी तरह से गलत है।

    फिर पढ़ें [postgresql] upsert या [postgresql] के लिए स्टैक अतिप्रवाह खोजें ] मर्ज , और।

    आपको काम करने के लिए वहां दिए गए PL / PgSQL फ़ंक्शन को काफी आसानी से अनुकूलित करने में सक्षम होना चाहिए। यह केवल रीड कमेटेड अलगाव में ठीक से चलाएगा, यद्यपि।

No comments:

Post a Comment