2010-02-02 15 views
5

जावा से केस-insensitively एक SQL डेटाबेस क्वेरी करने के लिए बढ़िया तरीका इस प्रकार है:ओरेकल एसक्यूएल में परिणाम केस-असंवेदनशील कैसे सॉर्ट करें?

String name = ...; // get the user's input (case is unknown) 
String sql = "select * from Person where lower(name) = ?"; 
Object jdbcBindVariable = name.toLowerCase(); 
// ... using JDBC, bind that variable and run the SQL query 

समस्या यह है कि कम आवरण एक भाषा-विशिष्ट आपरेशन है। उदाहरण के लिए, "I" पत्र को कम-आवरण "अंग्रेजी और तुर्की में अलग-अलग परिणाम देता है। उपरोक्त कोड में, वहाँ दो कम आवरण संचालन कर रहे हैं:

  • स्ट्रिंग # toLowerCase() विधि
  • कम() डेटाबेस समारोह

मैं कैसे सुनिश्चित कर सकते हैं कि जावा और डेटाबेस एक ही लोकेल का उपयोग कर रहे हैं और इस तरह एक वैध तुलना कर रहे हैं?

मुझे पता है कि स्ट्रिंग क्लास में एक लोअरकेस (लोकेल) विधि है, लेकिन मुझे कैसे पता चलेगा कि डेटाबेस का लोकेल क्या उपयोग कर रहा है? क्या मैं इसे प्रोग्रामिक रूप से देख सकता हूं, या क्या मुझे उस लोकेल को हार्ड-कोड करना है जिसके साथ मुझे लगता है कि डेटाबेस (इस मामले में ओरेकल 10 जी) कॉन्फ़िगर किया गया है?

उत्तर

2

सरल उत्तर डेटाबेस को ऐसा करने देता है। जिस तरह से बाइंड वैरिएबल को कम मामले में रखा जाता है, वैसे ही कॉलम मान को लोअरकेस में रखा जाता है।

String sql = "select * from Person where lower(name) = lower(?)"; 
+0

यह इतना आसान और फिर भी मैंने कभी इसके बारे में सोचा नहीं। –

1

... लेकिन मैं कैसे पता है कि स्थानीय डेटाबेस का उपयोग कर रहा है? मैं इस प्रोग्राम के रूप में ...

वहाँ एक पोर्टेबल (डेटाबेस स्वतंत्र) तरीका यह है होना करने के लिए प्रकट नहीं होता है की जाँच कर सकते हैं, लेकिन आप जाहिरा तौर पर एक Orable डेटाबेस द्वारा प्रयोग किया जाता चारसेट प्राप्त करने के लिए निम्न क्वेरी का उपयोग कर सकते हैं:

select value from nls_database_parameters where parameter = 'NLS_CHARACTERSET'; 

This page अधिक जानकारी देता है।

वास्तव में तुलना करने के लिए, आप डेटाबेस को निम्न-आवरण की देखभाल करने के लिए सबसे अच्छा (*) दे देंगे, जैसा कि @ गैरी सुझाव देता है। जेडीबीसी चालक जावा (यूटीएफ -16) स्ट्रिंग्स को जो भी डेटाबेस उपयोग कर रहा है उसे परिवर्तित करने का ख्याल रखेगा।

(* वास्तव में, मैं आप, ज्यादा विकल्प नहीं है जब तक आप डेटाबेस में सभी queriable तार के मिश्रित-केस और लोअर केस प्रतियां भंडारण की लागत पहनने के लिए तैयार कर रहे हैं नहीं लगता।)

+1

"ओरेबल डेटाबेस" - फ़्रायडियन पर्ची? :-) –

+0

ओह प्रिय! उसमें कैसे पर्ची हुई? :-) –

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