दिलचस्प पोस्ट
एससीजेपी 6 रेगेक्स इश्यू क्या आकार (कुछ पॉइंटर) हमेशा चार के बराबर है? इकाई परीक्षण DbContext पायथन की स्टडब्लब का उपयोग करके स्थानीय आईपी पते ढूँढना रिच टेक्स्टबॉक्स स्ट्रिंग के विभिन्न भागों का रंग कस्टम चयनकर्ता के माध्यम से सूची दृश्य वस्तु पृष्ठभूमि FancyBox 2.0 का प्रयोग करते समय मैं शीर्षक टैग से होवर पर टूलटिप कैसे छुपाऊं? क्या "(" ;;) "जबकि" (सच) "की तुलना में तेज़ है? यदि नहीं, तो लोग इसका उपयोग क्यों करते हैं? मैं अपने जावा प्रोग्राम को .exe फ़ाइल में कैसे रूपांतरित कर सकता / सकती हूं? Install.packages का उपयोग करके आर-फोर्ज पैकेज इंस्टॉल नहीं कर सकते कन्वर्ट_मैंसेसेकपीपीपी के लिए एक गाइड PostgreSQL में प्रविष्टि प्रदर्शन को गति कैसे करें मुझे जावा में मानक ट्री आधारित मानचित्र कार्यान्वयन कहां मिल सकता है? प्रश्न चिह्न और डॉट ऑपरेटर क्या है? सी # 6.0 में मतलब है? विज़ुअल स्टूडियो के साथ गिट का इस्तेमाल करना

कैसे विशेष वर्णों से बचने के लिए 'में एंड्रॉइड एसक्लाइट में

मेरे पास एक फ़ंक्शन है जो SQLite डेटाबेस में एक तालिका पर एक क्वेरी निष्पादित कर रहा है मैं एक स्थिर घोषित करता हूं: public static final String CANADA_HISTORY = "Canada's History"; । यह एक String वेरिएबल में संग्रहीत है जो हमें difficulty कहते हैं,

मेरे पास एक क्वेरी है:

 Cursor c = mDb.rawQuery("select * from Questions_answers where CHAPTERS = '"+difficulty+"'" , null); 

यह apostrophe के निकट एक अपवाद फेंक रहा है

लकड़हारा आउटपुट:

 I/Database( 1170): sqlite returned: error code = 1, msg = near "s": syntax error D/AndroidRuntime( 1170): Shutting down VM W/dalvikvm( 1170): threadid=1: thread exiting with uncaught exception (group=0x40015560) E/AndroidRuntime( 1170): FATAL EXCEPTION: main E/AndroidRuntime( 1170): android.database.sqlite.SQLiteException: near "s": syntax error: , while compiling: select * from Questions_answers where CHAPTERS = 'Canada's History' 

मैंने भी कोशिश की है:

 1. difficulty=difficulty.replaceAll("'","''"); 2. difficulty=difficulty.replaceAll("'","\'"); 3. difficulty = DatabaseUtils.sqlEscapeString(difficulty); 

उसमें जोड़ने के लिए, यह मुझे Canada History जैसे एकल शब्दों के लिए काम कर रहा है, मेरा मतलब है विशेष वर्ण शब्द के बिना।

कृपया मुझे समस्या को हल करने के लिए सलाह दें धन्यवाद

वेब के समाधान से एकत्रित समाधान "कैसे विशेष वर्णों से बचने के लिए 'में एंड्रॉइड एसक्लाइट में"

सबसे पहले इस के साथ चार स्थान बदलें

 difficulty=difficulty.replaceAll("'","\'"); 

तो इसे अपनी क्वेरी में पास करें

 "select * from Questions_answers where CHAPTERS='"+difficulty+"'"; 

संपादित करें:

  q = "select * from Questions_answers where CHAPTERS = ?"; database.rawQuery(q, new String[] { difficulty}); 

एसक्यूएल मानक बताता है कि पंक्ति में सिंगल-कोट्स एक पंक्ति में दो सिंगल उद्धरण डालकर बच गए हैं। एससीएल संबंध में पास्कल प्रोग्रामिंग भाषा की तरह काम करता है। SQLite इस मानक का अनुसरण करता है। उदाहरण:

 INSERT INTO xyz VALUES('5 O''clock'); 

संदर्भ: SQLite FAQ

इस उद्देश्य के लिए डिज़ाइन एक देशी एंड्रॉइड विधि का सबसे अच्छा तरीका है:

 DatabaseUtils.sqlEscapeString(String) 

यहां ऑनलाइन दस्तावेज़ीकरण दिया गया है:

  • एंड्रॉइड डेवलपर्स पर sqlEscapeString ()

इस विधि का उपयोग करने का मुख्य लाभ, मेरी राय में, स्पष्ट विधि नाम के कारण स्वयं-प्रलेखन है।

मेरे लिए क्या काम था?

 if (columnvalue.contains("'")) { columnvalue = columnvalue.replaceAll("'", "''"); } 

आप Cursor c = mDb.rawQuery("select * from Questions_answers where CHAPTERS = \""+difficulty+"\"" , null); कोशिश कर सकते हैं Cursor c = mDb.rawQuery("select * from Questions_answers where CHAPTERS = \""+difficulty+"\"" , null);

यह वही काम करेगा:

 if (columnValue.contains("'")) columnValue = columnValue.replaceAll("'", "[']"); 

या

 if (columnValue.contains("'")) columnValue = columnValue.replaceAll("'", "\\\'"); 

लेकिन वास्तविकता में हम अगले प्रतीकों का उपयोग करते हैं% और _

क्या DatabaseUtils.sqlEscapeString(s) अनिवार्य रूप से करता है, दो सिंगल उद्धरण ( '' ) के साथ सभी एकल उद्धरण ( ' ) की जगह लेता है और स्ट्रिंग के अंत में शुरुआत में एक और एक सिंगल उद्धरण जोड़ता है।
इसलिए यदि आप स्ट्रिंग से बचना चाहते हैं तो यह फ़ंक्शन कार्य करना चाहिए:

 private static String escape(String s) { return s != null ? s.replaceAll("\'", "\'\'") : null; } 

मेरी समझ के अनुसार दो अनुमोदन हैं,

स्ट्रिंग टेस्ट = "एंड्रॉइड के vaersion" test = test.replace ("'", "'");

यह परिदृश्य बिल्कुल ठीक है, लेकिन मैं निश्चित रूप से निम्न दृष्टिकोण का उपयोग करने का सुझाव देगा।

स्ट्रिंग टेस्ट = "एंड्रॉइड के vaersion" test = test.replaceAll ("'", "\'");

जब हम अपडेट करने की कोशिश कर रहे थे और 'के साथ एसक्यूएलआईटी टेबल मूल्य का चयन करते समय हमने इस मुद्दे का सामना किया'

क्या आपको भी \ N से बचने की आवश्यकता नहीं है? इसलिए इसे replaceAll("'", "\\'") किया replaceAll("'", "\\'") या मैं इसके बारे में गलत हूँ?