जेडीबीसी में Connection
, Statement
, और ResultSet
प्रकारों में प्रत्येक getWarnings()
विधि है जो उस प्रकार की वस्तुओं से जुड़ी पहली चेतावनी उत्पन्न करने के लिए निर्दिष्ट है। दूसरी और बाद की चेतावनियां, यदि वे मौजूद हैं, तो पहली चेतावनी पर जंजीर हैं (यदि यह भी मौजूद है, null
कोई चेतावनी नहीं होने पर उत्पादित होता है)।जेडीबीसी के साथ कनेक्शन, स्टेटमेंट्स और परिणामसेट्स पर getWarnings() को कब कॉल करें?
चश्मे कहते हैं कि कुछ प्रकार के कार्यों के बाद इन प्रकार की वस्तुओं से जुड़ी चेतावनियां साफ़ हो जाती हैं। उदाहरण के लिए ResultSet
पर चेतावनियां साफ़ की जाती हैं जब प्रत्येक नई पंक्ति पढ़ी जाती है।
SQLWarning
प्रकार SQLException
का उप प्रकार है। तो एक चेतावनी की उपस्थिति एक अपवाद द्वारा इंगित किया जाएगा? और अपवाद के रनटाइम प्रकार SQLWarning
है, तो उस अपवाद को संबंधित ऑब्जेक्ट पर जंजीर किया जाएगा?
मैं क्या सोच रहा हूँ इस है, और यह ड्राइवर हो सकती है, कैसे मैं जानता हूँ कि जब मैं getWarnings()
फोन और एक गैर null
प्रतिक्रिया की अपेक्षा करना चाहिए? एक और तरीका रखो, एक जेडीबीसी ऑब्जेक्ट पर एक चेतावनी मौजूद है और उस ऑब्जेक्ट को अपवाद फेंकने के बाद ही getWarnings()
के साथ उपलब्ध है? (और वह अपवाद चेतावनी है?)
क्या मुझे प्रत्येक जेडीबीसी ऑपरेशन के बाद चेतावनियों को देखने के लिए getWarnings()
पर कॉल करना चाहिए "बस सुनिश्चित करें" यदि मेरा लक्ष्य हर चेतावनी का पालन करना है?
मैं इस तरह की चेतावनियों को एक ढांचे (इस मामले में वसंत) के माध्यम से लॉगिंग करने के विचार के बाद "आप ऐसा क्यों करना चाहते हैं" से उलझन में हैं। ढांचे को हर चेतावनी का पालन करने के लिए हाथ से लिखे गए कोड के समान ही काम नहीं करना चाहिए? मुझे अंतर नहीं दिख रहा है ... या आप बस बहस कर रहे हैं कि चेतावनी रिपोर्टिंग कोड लिखने के बजाय ढांचे का उपयोग करके प्रोग्रामर पर कम काम है? निश्चित रूप से, एक प्रदर्शन बिंदु-दृष्टिकोण से, दोनों दृष्टिकोण एक ही जेडीबीसी एपीआई निष्पादित कर रहे हैं ... –
हां, वही जेडीबीसी विधियों को बुलाया जाएगा। मेरा मतलब था कि मैंने कभी भी खुद को चेतावनियों की स्पष्ट रूप से जांच नहीं की है। मैंने आपको चेतावनियां लॉग करने का एक आसान तरीका प्रदान करने का भी प्रयास किया। – jtoberon
कभी-कभी "चेतावनियां" वास्तव में बहुत गंभीर हो सकती हैं। सालों पहले मैंने एक परियोजना पर काम किया जो साइबेस का इस्तेमाल करता था, और यह पता चला कि 'NUM.000IC (n, 2)' कॉलम में "37.000" जैसे संख्यात्मक मान डालने से पता चलता है कि सम्मिलित की पूरी पंक्ति को अनदेखा किया जाएगा, लेकिन उत्पादन होगा एक चेतावनी, अपवाद फेंक नहीं। यह एक दुर्लभ पर्याप्त घटना थी कि हमारे परीक्षणों ने इसे पकड़ नहीं लिया था, और यह तब तक नहीं था जब तक कोड कुछ हफ्तों तक उत्पादन में नहीं था जब हमने पाया कि हमारे कुछ आवेषण चुपचाप विफल रहे थे। हमने सभी जेडीबीसी ऑब्जेक्ट्स को रैपर के साथ लपेटकर समाप्त किया जो प्रत्येक 'एसक्यूएलवार्निंग' को फेंक देगा। –