2011-05-05 13 views
12

हम एक ओरेकल डेटाबेस द्वारा समर्थित जावा एप्लिकेशन का निर्माण कर रहे हैं जिसे हम जेडीबीसी (ड्राइवर ojdbc6.jar और orai18n.jar) का उपयोग करके एक्सेस करते हैं। डेटाबेस स्कीमा मुख्य रूप से NVARCHAR2 डेटा प्रकार का उपयोग कर टेक्स्ट कॉलम संग्रहीत करता है।क्या मुझे getString() के बजाय जेडीबीसी getNString() का उपयोग करना चाहिए?

JDBC documentation JDBC ResultSet के लिए कहा गया है कि विशेष रूप से getNString() NCHAR, NVARCHAR आदि डेटा प्रकार के साथ प्रयोग के लिए बनाया गया है, लेकिन इस समय हम केवल getString() उपयोग कर रहे हैं।

यह ठीक काम करता प्रतीत होता है, इसलिए मुझे आश्चर्य है कि मुझे के बजाय getNString() का उपयोग क्यों करना चाहिए। getString() गैर-ASCII वर्ण दर्ज किए जाने में असफल होने जा रहा है, या ओरेकल जेडीबीसी चालक उदासीन है कि मुझे किस विधि का उपयोग करना चाहिए?

संपादित करें: ऐसा लगता है कि यह डेटाबेस-निर्भर: SQL Server doesn't seem to mind which you use, कनेक्शन पैरामीटर के आधार पर हो सकता है। क्या किसी के पास ओरेकल पर कोई विशिष्ट जानकारी है?

उत्तर

7

मैं हमारे आवेदन पर एक परीक्षण किया है के लिए खत्म कदम होगा और ऐसा लगता है कि getNString() जावा 6, JDBC 6, ओरेकल JDBC 6 ड्राइवरों और Oracle 11.1.0.6.0 साथ अनावश्यक है । मैंने उपयोग की जाने वाली टेस्ट स्ट्रिंग "Δ, Й, ק, م, 7, あ, 叶, 葉, और 말" थी, http://en.wikipedia.org/wiki/Unicode से कॉपी की गई थी।

हमारे अधिकांश डेटा एक्सेस संग्रहीत प्रक्रियाओं के माध्यम से किया जाता है। जावा setObject() और getString() (setString() अबास्ट्रक्शन कारणों के लिए) के माध्यम से उपरोक्त परीक्षण स्ट्रिंग को सही ढंग से सेट और पुनर्प्राप्त करने में सक्षम था, इंटरफ़ेस से डेटा एकत्रित करके और इसे अपेक्षित रूप से इंटरफ़ेस पर लिखना।

इसलिए getString() ओरेकल 11 जी (जैसे उपरोक्त लिंक में SQL सर्वर की तरह) के साथ यूनिकोड डेटा के लिए ठीक काम करता है, इसलिए हम getNString() के बजाय इसका उपयोग जारी रखेंगे।

+2

मेरा सुझाव है कि आप उस परीक्षण को अपने रिग्रेशन सूट में जोड़ें यदि यह ओरेकल या जावा – artbristol

+0

@artbristol के भविष्य के संस्करणों में बदलता है - यह एक बहुत अच्छा विचार है। ओरेकल कॉन्फ़िगरेशन में भी एक बदलाव संभावित रूप से एक रिग्रेशन का कारण बन सकता है (हालांकि मेरे पास यह मानने का कोई कारण नहीं है कि ओरेकल कॉन्फ़िगरेशन के अनुभव के अलावा) – Gnat

2

यदि आपका डीबी NVARCHAR2 डेटाटाइप का उपयोग करता है, तो इसे बहुभाषी डेटा संग्रहीत करने के लिए डिज़ाइन किया गया है। यदि आपके कॉलम में कोई यूनिकोड डेटा संग्रहीत किया जाता है तो आपका प्रोग्राम टूट जाएगा। अगर मैं तुम्हें थे, मैं getNXXX() तरीकों

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