2010-04-27 17 views
6

जब मैं JDBC के माध्यम से एक SQL विवरण फोन डीबी 2 पर और बयान में विफल रहता है, मैं निम्न संदेश पाठ के साथ एक SQLException पकड़ने:डीबी 2 से वर्णनात्मक त्रुटि संदेश कैसे प्राप्त करें?

com.ibm.db2.jcc.a.nn: DB2 SQL Error: SQLCODE=-206, SQLSTATE=42703, 
    SQLERRMC=O.METADATENSATZ, DRIVER=3.52.95 

मैं error list published by IBM के अनुसार संदेश की स्वचालित अनुवाद करने की कोशिश की है, लेकिन वहाँ अपवाद के अन्य तत्वों के संदर्भ में संदेशों के अंदर प्लेसहोल्डर्स हैं।

अपवाद के अंदर इन तत्वों की तलाश करते समय, मुझे DB2ExceptionFormatter मिला और गायब तत्वों तक पहुंचने के लिए इसका उपयोग करने का प्रयास किया।

लेकिन यहाँ मैं बंद कर दिया, क्योंकि DB2ExceptionFormatter मुझे एक सुराग दे दिया: सर्वर से संदेश पाठ प्राप्त करने के लिए प्रयास करते हुए

समय त्रुटि हुई। केवल संदेश टोकन उपलब्ध हैं।

तो मेरे सवाल है: क्या मेरे पास हैं डीबी 2 सर्वर से सही संदेश प्राप्त करने के लिए कॉन्फ़िगर करने के?

यदि मैं सर्वर से मानव पठनीय संदेश प्राप्त कर सकता हूं, तो मैं इसे सीधे उपयोग कर सकता हूं और इसे स्वयं से अनुवाद नहीं करना पड़ेगा।

+0

उस प्रश्न का उत्तर देने के लिए, यह जानना उपयोगी होगा कि डीबी 2 संस्करण और सिस्टम (LUW, z/OS, AS400, आदि) आप क्या उपयोग कर रहे हैं। बेहतर SQLSTATE सूची में इंगित करने के लिए –

उत्तर

6

मुझे यकीन है कि क्या संदेश संदर्भ आप ऊपर देख रहे हैं नहीं कर रहा हूँ के लिए उपलब्ध नहीं है (ऐसा लगता है iSeries होने के लिए), लेकिन आप से बेहतर कर रहे हैं here से अधिक डीबी 2 संदेश संदर्भ के लिए जा रहा

अवलोकन किया जा रहा SQL0206 हमें this page हो जाता है, निम्नलिखित जानकारी के साथ:।

नाम उस संदर्भ में मान्य नहीं है जहां इसका उपयोग किया जाता है।

SQLERRMC "O.METADATENSATZ" इसलिए मैं इस ले जाएगा मतलब करने के लिए आप डीबी 2 के लिए एक SQL विवरण भेजा है और यह रिपोर्ट है कि "O.METADATENSATZ" मान्य नहीं है ... या तो स्तंभ नहीं करता ' टी मौजूद नहीं है या तालिका "ओ" मौजूद नहीं है।

message reference राज्यों के रूप में, आप स्वचालित रूप से डीबी 2 त्रुटि संदेश का अनुवाद करना चाहते हैं:

संदेश मदद आह्वान करने के लिए, कमांड लाइन प्रोसेसर खोलने के लिए और दर्ज करें:

? XXXnnnnn

जहां XXX एक मान्य संदेश उपसर्ग का प्रतिनिधित्व करता है और nnnnn मान्य संदेश संख्या का प्रतिनिधित्व करता है।

:

एक दिया SQLSTATE मान से संबद्ध संदेश पाठ जारी करके प्राप्त किया जा सकता है? nnnnn

या

? एन

जहां nnnnn पांच अंकों का SQLSTATE (अल्फान्यूमेरिक) है और एनएन दो अंकों का SQLSTATE क्लास कोड (SQLSTATE मान के पहले दो अंक) है।

आपके मामले में, एक डीबी 2 सीएलपी में "? SQL0206" टाइप करने से आपको त्रुटि संदेश मिल जाएगा।

+0

+1। – tangens

3

मैं एक संकेत here पाया:

retrieveMessagesFromServerOnGetMessage:

JDBC SQLException.getMessage कॉल JDBC और SQLJ के लिए IBM DB2 ड्राइवर का कारण निर्दिष्ट करता है कि क्या z/OS संग्रहीत प्रक्रिया के लिए एक डीबी 2 आह्वान करने के लिए जो त्रुटि के लिए संदेश पाठ पुनर्प्राप्त करता है। इस संपत्ति का डेटा प्रकार बूलियन है। डिफ़ॉल्ट गलत है, जिसका अर्थ है कि पूर्ण संदेश पाठ क्लाइंट को वापस नहीं किया जाता है।


मैं इस कोशिश की, लेकिन sqlException.getMessage() के उत्पादन में केवल किसी भी आसपास के संदेश पाठ के बिना

O.METADATENSATZ 

को बदल दिया है।


अब मैं this पाया:

इससे पहले कि आप z/OS® सबसिस्टम के लिए एक DB2® पर JDBC और SQLJ के लिए IBM® डाटा सर्वर ड्राइवर के कुछ कार्यों का उपयोग कर सकते हैं, तो आप स्थापित करने की आवश्यकता संग्रहित प्रक्रियाओं का एक सेट और तालिकाओं का एक सेट बनाएँ।

...

WLM z/OS सिस्टम पर स्थापित किया जाना चाहिए।

WLM DB2 Workload Manager कि डीबी 2 एक्सप्रेस संस्करण मैं विकास के लिए उपयोग कर रहा हूँ :-(

संबंधित मुद्दे