2010-01-10 8 views
8

विभिन्न डेटाबेस सर्वर पहचानकर्ताओं को उद्धृत करने और भागने के विभिन्न तरीकों का उपयोग करते हैं।जेडीबीसी के साथ कॉलम नाम जैसे पहचानकर्ताओं को उद्धृत/भागने के लिए कैसे?

उदा। "फू बार" बनाम 'फू बार' बनाम [फू बार], या "10" "बनाम" 10 \ "", या फ़ूबार या सरणी जैसे पहचानकर्ताओं को कुछ डेटाबेस के लिए उद्धृत करने की आवश्यकता है, लेकिन दूसरों के लिए नहीं।

क्या कोई एपीआई विधि है जो दिए गए डेटाबेस कनेक्शन के लिए उद्धरण/एस्केपिंग सही तरीके से करती है? या कोई वैकल्पिक समाधान?

उत्तर

3

मुझे लगता है कि आपके प्रश्न का उत्तर यह है कि यदि आप जेडीबीसी का उपयोग कर डेटाबेस तटस्थ आवेदन लिख रहे हैं, तो आप डेटाबेस तटस्थ नामों का उपयोग करने की आवश्यकता है, न कि उन चीजों के लिए जिन्हें प्रति डेटाबेस विक्रेता से विशेष भागने की आवश्यकता होती है।

जेडीबीसी में मुझे कुछ भी पता नहीं है जो इसका समर्थन करता है। एक ओआरएम उत्पाद ऐसी चीजों से निपटेंगे।

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

+1

डेटाबेस तटस्थ नाम है, लेकिन आश्चर्य के बारे में अच्छी बात हो सकती है अभी भी दिखाई दे सकता है (उदाहरण के लिए एक निश्चित पहचानकर्ता किसी अन्य डेटाबेस में स्वीकार्य नहीं हो सकता है)। इसके अलावा, अगर मैं हूं तो वास्तव में एक ओआरएम लिख रहा हूं? क्या प्रत्येक समर्थित डेटाबेस के लिए इसे एक अलग हाथ से कोडित उद्धरण/भागने के कार्यान्वयन की आवश्यकता होगी? – aditsu

+1

SQL मानक में पहचानकर्ता नामकरण के लिए नियमों पर चिपकाएं। वे कहीं भी काम करेंगे। –

+1

@ पॉल टॉम्बलिन हे, हाँ, "मानक"। कल्पना में बहुत सारी लचीलापन है - और विक्रेता अपने स्वयं के कीवर्ड और आरक्षित शब्द जोड़ते हैं, जिन्हें एप्लिकेशन का उपयोग करने के लिए उद्धृत किया जाना चाहिए। मैं मानता हूं कि spec से चिपकने का प्रयास करना कम से कम दर्दनाक विकल्प है, लेकिन यह * बेकार * है कि जेडीबीसी एक 'java.sql.Connection.quoteIdentifier (...) 'या' DatabaseMetaData.quoteIdentifier (...) 'विधि और समर्थन एसपीआई, क्योंकि इसका मतलब है कि आप हमेशा आरक्षित शब्द नृत्य कर रहे हैं। 'getIdentifierQuoteString' नौकरी नहीं करता है, यह उद्धरण नियमों को व्यक्त नहीं करता है। –

12

पर

DatabaseMetaData.getIdentifierQuoteString() 

मैं इसे इस्तेमाल कभी नहीं एक नज़र लेकिन यह लग रहा है अच्छा :-)

getExtraNameCharacters() भी कुछ मदद

+0

कोई पूरा समाधान नहीं है, लेकिन निश्चित रूप से उपयोगी है! – aditsu

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