दिलचस्प पोस्ट
निर्धारित करें कि एक स्ट्रिंग जावा में एक पूर्णांक है <Input type = 'button' /> और <input type = 'submit' /> के बीच का अंतर कैसे "एंड्रॉइड: एटीआर / सक्रियबैकबैंड इंडिकेटर" काम करता है? क्या यह परियोजना लंबोक का उपयोग करने के लिए सुरक्षित है? त्रुटियों को मैन्युअल रूप से लॉग करने के लिए ELMAH का उपयोग कैसे करें Laravel 5.2 सत्यापन त्रुटि ब्लेड में प्रकट नहीं हुई अक्षर से अक्षर निकालें Zend डीबी का उपयोग कर एक उपकुंजी लेखन प्रतिक्रिया देने वाली प्रतिक्रियाएं अनचाहे प्रकार प्रकार: त्रुटि: सुपर अभिव्यक्ति या तो रिक्त या फ़ंक्शन होती है, अनिर्धारित नहीं वेक्टर को सी ++ में सरणी में कनवर्ट कैसे करें 3 पार्टी जेएस के लिए ब्राउज़र कैशिंग का लाभ उठाएं डॉकर में "एक्सपोज़" और "प्रकाशित" के बीच का अंतर केवल सीएसएस के साथ डीआईवी स्थिति स्वैप करें यह साबित नहीं किया जा सकता कि सिंगलटन प्रकार सिंगलटन प्रकार होते हैं जबकि टाइप क्लास इंस्टेंस उत्पन्न करते हैं फ़ाइल पथ को यूआरआई फ़ाइल में कनवर्ट करना?

एंड्रॉइड में तैयार बयान के साथ प्रश्न?

Android में, android.database.sqlite.SQLiteStatement मुझे इंजेक्शन हमलों से बचने के लिए SQLite में तैयार बयान का उपयोग करने की अनुमति देता है। इसकी execute विधि बनाने / अपडेट / हटाए जाने के कार्य के लिए उपयुक्त है, लेकिन ऐसा कोई प्रतीत नहीं होता जो किसी कर्सर या समानता को लौटाता है।

अब आईओएस में मैं तैयार sqlite3_stmt* प्रकार के बयान तैयार कर सकता हूं और उन्हें क्वेरी के लिए उपयोग कर सकता हूं, इसलिए मुझे पता है कि यह SQLite की एक सीमा नहीं है। एंड्रॉइड में तैयार बयानों के साथ मैं क्यूंकि कैसे कर सकता हूं?

Solutions Collecting From Web of "एंड्रॉइड में तैयार बयान के साथ प्रश्न?"

एक तैयार बयान आपको दो चीजें करने की अनुमति देता है

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

मैं बिल्कुल नहीं जानता / कहता हूं कि एंड्रॉइड एसक्यूएलईटी कार्यान्वयन वास्तव में sqlite3_prepare (afiak sqlite3_prepare_v2 – यहाँ देखें) का उपयोग करता है, लेकिन इसका उपयोग अन्यथा आप संकलित-एसक्यूएल स्टेटमेंट कैश त्रुटियों के लिए अधिकतम आकार प्राप्त नहीं कर पाए।

इसलिए यदि आप कार्यान्वयन पर भरोसा करने के लिए डेटाबेस से क्वेरी करना चाहते हैं तो मुझे कोई तरीका नहीं पता है कि यह SQLiteStatement साथ करने के लिए है

इंजेक्शन सुरक्षा के संबंध में, हर डेटाबेस क्वेरी, डालें, आदि विधि (कभी कभी वैकल्पिक) संस्करण हैं जो आपको तर्क बाध्य करने की अनुमति देते हैं।

यदि आप एक Cursor बाहर निकलना चाहते हैं तो

 SELECT * FROM table WHERE column1='value1' OR column2='value2' 

Cursor SQLiteDatabase#rawQuery(

  • String sql , पूर्ण SELECT न्यास, जिसमें शामिल ? सकते हैं ? हर जगह
  • String[] selectionArgs : मूल्यों की सूची जो प्रतिस्थापित करती है ? , क्रम में वे दिखाई देते हैं

)

 Cursor c1 = db.rawQuery( "SELECT * FROM table WHERE column1=? OR column2=?", new String[] {"value1", "value2"} ); 

Cursor SQLiteDatabase#query (

  • String table , तालिका नाम, शामिल हो सकते हैं आदि
  • String[] columns ,: आवश्यक कॉलम की सूची, null = *
  • String selection :, WHERE उपखंड के बावजूद WHERE / में शामिल होना चाहिए ?
  • String[] selectionArgs ,: मूल्यों की सूची जो प्रतिस्थापित करती है ? , क्रम में वे दिखाई देते हैं
  • String groupBy GROUP BY ,: GROUP BY खंड w / o GROUP BY
  • String having ,: HAVING क्लॉज w / ओ HAVING
  • String orderBy ORDER BY तहत डब्लू / ओ ORDER BY

)

 Cursor c2 = db.query("table", null, "column1=? OR column2=?", new String[] {"value1", "value2"}, null, null, null); 

ContentProviders के माध्यम से – यह मामला थोड़ा अलग है क्योंकि आप किसी अमूर्त प्रदाता के साथ इंटरैक्ट करते हैं, डेटाबेस नहीं। वहाँ कोई गारंटी नहीं है कि ContentProvider समर्थन करने वाले एक SQLite डेटाबेस है। इसलिए जब तक आप यह नहीं जानते कि कॉलम क्या हैं / प्रदाता आंतरिक रूप से काम करता है, तो आपको दस्तावेज़ीकरण के अनुसार क्या करना चाहिए।

Cursor ContentResolver#query(

  • Uri uri : एक यूआरआई डेटा स्रोत का प्रतिनिधित्व करती है (आंतरिक रूप से एक तालिका में अनुवादित है)
  • String[] projection , आवश्यक कॉलम की सूची, null = *
  • String selection :, WHERE उपखंड के बावजूद WHERE / में शामिल होना चाहिए ?
  • String[] selectionArgs ,: मूल्यों की सूची जो प्रतिस्थापित करती है ? , क्रम में वे दिखाई देते हैं
  • String sortOrder ORDER BY : ORDER BY क्लॉज w / o ORDER BY

)

 Cursor c3 = getContentResolver().query( Uri.parse("content://provider/table"), null, "column=? OR column2=?", new String[] {"value1", "value2"}, null); 

संकेत: यदि आप यहां LIMIT करना चाहते हैं तो आप इसे ORDER BY खंड में जोड़ सकते हैं:

 String sortOrder = "somecolumn LIMIT 5"; 

या ContentProvider के कार्यान्वयन के आधार पर इसे Uri पैरामीटर के रूप में जोड़ें:

 Uri.parse("content://provider/table?limit=5"); // or better via buildUpon() Uri audio = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; audio.buildUpon().appendQueryParameter("limit", "5"); 

सभी मामलों में ? आपके द्वारा बाइंड तर्क में जो कुछ डाल दिया गया है, उसके बच संस्करण से प्रतिस्थापित किया जाएगा।

? + "hack'me" = 'hack''me'