2012-07-27 10 views
14

मैं डेटाबेस (> 10 के) से शर्तों को पढ़ने की कोशिश कर रहा हूं और मैं उस शब्द का उपयोग किसी अन्य क्वेरी में कर रहा हूं। मैं Oracle में निम्न त्रुटि हो रही है:एसक्यूएल में एकल उद्धरण से कैसे बचें जो 'उद्धृत स्ट्रिंग को ठीक तरह से समाप्त नहीं किया जा रहा है'?

उद्धृत स्ट्रिंग ठीक से समाप्त नहीं '

मैं

term.replaceAll("'", "\\'"); 

किया लेकिन वह मुझ से काम करने के लिए प्रतीत नहीं होता। इसके अलावा, इन शर्तों को दस्तावेजों से टोकन होते हैं जब उन्हें टेक्स्ट में परिवर्तित किया जाता है। क्या कोई नियमित अभिव्यक्ति है जो इस समस्या को दूर कर सकती है?

सटीक SQL क्वेरी है:

String sql = "Select * from indexDB where (DocID=" + d.getDocId() + "and Term='" + term + "')"; 

मैं जावा का उपयोग कर रहा हूँ। प्रतिस्थापन मेरे लिए काम नहीं करता है।

+1

आपको [SQL इंजेक्शन] (http://en.wikipedia.org/wiki/SQL_injection) पर पढ़ने की आवश्यकता है – Oded

+3

पैरामीटरयुक्त क्वेरी का उपयोग करने के तरीके के विवरण के लिए http://bobby-tables.com/ को भी देखें आप जो भी भाषा उपयोग कर रहे हैं। यह आपको एसक्यूएल इंजेक्शन से बचाएगा जिसे ओडेड ने संदर्भित किया था। –

+1

हाँ इसके माध्यम से चला गया और पैरामीटर क्वेरी ने किया !! बहुत बहुत धन्यवाद ! – Aashima

उत्तर

34

आप इसे दोहराते हुए एक भी बोली बच सकते हैं:

term.replaceAll("'","''"); 

इससे भी बेहतर विकल्प एक पैरामिट्रीकृत क्वेरी होगा। उदाहरण के लिए, हमें आपकी ग्राहक भाषा जाननी होगी।

+0

*** ओरेकल *** में अधिक विशेष वर्ण, न केवल _character_ ** '**? – Kiquenet