दिलचस्प पोस्ट
सीएसएस अर्थ में क्या महत्वपूर्ण है? एंड्रॉइड फोन में कष्टप्रद संवाद के बिना मैं वाक् पहचान कैसे उपयोग कर सकता हूं Android वेबदृश्य धीमा है क्या कोई CSS3 एनीमेशन पूरा होने पर एक कॉलबैक है? पायथन मॉड्यूल में सभी फ़ंक्शन कैसे सूचीबद्ध करें? Singletons वास्तव में है कि बुरा कर रहे हैं? दो सरणियों के डॉट उत्पाद से स्मृति बैंडविड्थ को मापना नियमित अभिव्यक्ति सत्यापन में दशमलव या संख्यात्मक मान पायथन और सुंदरसूप एन्कोडिंग समस्याएं रूबी के सेटर्स को कक्षा में "आत्म" योग्यता की आवश्यकता क्यों है? एकाधिक मॉडल एडमिन / Django व्यवस्थापक में एक ही मॉडल के लिए विचार सी के लिए XML पार्सर संदर्भ असाइनमेंट परमाणु है इसलिए इंटरलॉक किया गया है। एक्सचेंज (रिज ऑब्जेक्ट, ऑब्जेक्ट) की आवश्यकता है? कैसे एक div के अंदर खड़ी एक छवि को संरेखित करें? याहू वित्त वेब सेवा गायब हो गया है? एपीआई बदल गया है? अस्थायी रूप से नीचे?

SQLiteDatabase.query विधि

मैं SQLiteDatabase की क्वेरी विधि का उपयोग कर रहा हूँ मैं क्वेरी विधि का उपयोग कैसे करूं?

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

Cursor cursor = sqLiteDatabase.query( tableName, tableColumns, whereClause, whereArgs, groupBy, having, orderBy); 

टेबल कॉलम – कॉलम पैरामीटर का निर्माण निम्न प्रकार से किया गया है।

 String[] columns = new String[]{KEY_ID, KEY_CONTENT}; 

यदि हमें सभी फ़ील्ड प्राप्त करने की आवश्यकता है, तो स्तंभ पैरामीटर कैसे बनाया जाना चाहिए। क्या हमें स्ट्रिंग सरणी में सभी फील्ड नामों को शामिल करने की आवश्यकता है?

मैं क्वेरी पद्धति का ठीक से उपयोग कैसे करूं?

वेब के समाधान से एकत्रित समाधान "SQLiteDatabase.query विधि"

tableColumns

  • सभी कॉलमों के लिए SELECT * FROM ... में null SELECT * FROM ...
  • SELECT column1, column2 FROM ... रूप में विशिष्ट स्तंभों के लिए new String[] { "column1", "column2", ... } – आप यहां जटिल अभिव्यक्तियां भी डाल सकते हैं:
    new String[] { "(SELECT max(column1) FROM table1) AS max" } आपको कॉलम को max नामांकित कॉलम 1 का अधिकतम मान column1

कहां कारण

  • उस कीवर्ड के बिना WHERE आपने रखा था उस भाग के बिना, "column1 > 5"
  • शामिल होना चाहिए ? ऐसी चीजों के लिए जो गतिशील हैं, जैसे "column1=?" -> whereArgs देखें

whereArgs

  • प्रत्येक को भरने वाली सामग्री निर्दिष्ट करें ? whereClause वे क्रम में दिखाई देते हैं

दूसरे

  • बस की तरह whereClause कीवर्ड या null बाद कथन को whereClause यदि आप इसका उपयोग नहीं करते हैं।

उदाहरण

 String[] tableColumns = new String[] { "column1", "(SELECT max(column1) FROM table2) AS max" }; String whereClause = "column1 = ? OR column1 = ?"; String[] whereArgs = new String[] { "value1", "value2" }; String orderBy = "column1"; Cursor c = sqLiteDatabase.query("table1", tableColumns, whereClause, whereArgs, null, null, orderBy); // since we have a named column we can do int idx = c.getColumnIndex("max"); 

निम्न कच्ची क्वेरी के बराबर है

 String queryString = "SELECT column1, (SELECT max(column1) FROM table1) AS max FROM table1 " + "WHERE column1 = ? OR column1 = ? ORDER BY column1"; sqLiteDatabase.rawQuery(queryString, whereArgs); 

जहां / बाइंड-एआरजीएस संस्करण का इस्तेमाल करते हुए आप स्वचालित रूप से मूल्यों से बच जाते हैं और आपको इनपुट-डाटा में शामिल होने पर चिंता करने की ज़रूरत नहीं है।

असुरक्षित: String whereClause = "column1='" + value + "'";
सुरक्षित: String whereClause = "column1=?";

क्योंकि यदि मान में ' आपका बयान या तो टूट जाता है और आपको अपवाद मिलता है या अनपेक्षित चीजें होती हैं, उदाहरण के लिए value = "XYZ'; DROP TABLE table1;--" ये भी आपकी तालिका को छोड़ सकती है क्योंकि बयान दो बयान और एक टिप्पणी बनेंगी:

 SELECT * FROM table1 where column1='XYZ'; DROP TABLE table1;--' 

आर्ग्स संस्करण का उपयोग करके XYZ'; DROP TABLE table1;-- XYZ'; DROP TABLE table1;-- 'XYZ''; DROP TABLE table1;--' भाग जाए 'XYZ''; DROP TABLE table1;--' 'XYZ''; DROP TABLE table1;--' और केवल एक मूल्य के रूप में इलाज किया जाएगा भले ही ' बुरा काम करने का इरादा नहीं है, यह अभी भी काफी सामान्य है कि लोगों को उनके नामों में मिला है या ग्रंथों, फ़ाइलनामों, पासवर्ड आदि में इसका इस्तेमाल करते हैं। इसलिए हमेशा एआरजीएस संस्करण का उपयोग करें। (यद्यपि whereClause और अन्य पुरानी whereClause सीधे बनाने में ठीक है)

जहां SQL क्वेरी का WHERE कथन बनाने के लिए क्लॉज और एआरजी एक साथ काम करते हैं तो कहते हैं कि आप व्यक्त करने के लिए देख रहे हैं

 WHERE Column1 = 'value1' AND Column2 = 'value2' 

तब आपके कहां क्लॉज और कहां होगा जैसे कि

 String whereClause = "Column1 =? AND Column2 =?"; String[] whereArgs = new String[]{"value1", "value2"}; 

यदि आप सभी तालिका कॉलम का चयन करना चाहते हैं, तो मेरा मानना ​​है कि तालिका के लिए एक निरर्थक स्ट्रिंग पारित होनी चाहिए स्तंभों को पर्याप्त होगा।

भविष्य के दर्शकों के लिए त्वरित संदर्भ होने का यह एक सामान्य जवाब है।

उदाहरण

 SQLiteDatabase db = helper.getReadableDatabase(); String table = "table2"; String[] columns = {"column1", "column3"}; String selection = "column3 =?"; String[] selectionArgs = {"apple"}; String groupBy = null; String having = null; String orderBy = "column3 DESC"; String limit = "10"; Cursor cursor = db.query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit); 

दस्तावेज़ीकरण से स्पष्टीकरण

  • table स्ट्रिंग: क्वेरी नाम को संकलित करने के लिए तालिका का नाम।
  • columns स्ट्रिंग: कॉलम की वापसी की सूची। रिक्त पास से सभी कॉलम वापस आ जाएगा, जो कि भंडारण से डेटा को पढ़ने से रोकने के लिए निराश है जिसे उपयोग नहीं किया जा रहा है।
  • selection स्ट्रिंग: एक पंक्ति जो कि पंक्तियों को वापस करने के लिए घोषित करता है, एक एसक्यूएल WHERE क्लॉज के रूप में स्वरूपित (WHERE खुद को छोड़कर) रिक्त पासिंग दिए गए तालिका के लिए सभी पंक्तियों को वापस कर देगा।
  • selectionArgs स्ट्रिंग: आप चयन में शामिल हो सकते हैं, जिसे चयन से मूल्यों से बदला जाएगा, ताकि वे चयन में दिखाई देते हैं। मान स्ट्रिंग्स के रूप में बाध्य होंगे।
  • groupBy स्ट्रिंग: एक समूह जो पंक्तियों को समूह के रूप में घोषित करता है, एक एसक्यूएल ग्रुप बाय क्लास के रूप में स्वरूपित (ग्रुप द्वारा खुद को छोड़कर) निरर्थक पास करने से पंक्तियों को समूहित नहीं किया जाएगा।
  • स्ट्रिंग having : एक फ़िल्टर कर्सर में जो पंक्ति समूहों को शामिल करने की घोषणा करता है, यदि पंक्ति समूह का उपयोग किया जा रहा है, तो एक SQL HAVING खंड के रूप में स्वरूपित किया गया है (केवल HAVING को छोड़कर) निरर्थक पास करना सभी पंक्ति समूहों को शामिल करने के लिए कारण होगा, और जब पंक्ति समूह उपयोग नहीं किया जा रहा है तब आवश्यक है।
  • orderBy स्ट्रिंग: एक एसक्यूएल ORDER BY क्लॉज के रूप में स्वरूपित पंक्तियों का ऑर्डर कैसे करें (ऑर्डर से स्वयं को छोड़कर) पासिंग नल डिफ़ॉल्ट सॉर्ट क्रम का उपयोग करेगा, जो अनारडेड हो सकती है।
  • limit स्ट्रिंग: क्वेरी द्वारा लौटायी जाने वाली पंक्तियों की संख्या, सीमाबद्ध सीमा के रूप में स्वरूपित। पासिंग नल का कोई सीधा सीमा नहीं है।
  db.query ( TABLE_NAME, new String[] { TABLE_ROW_ID, TABLE_ROW_ONE, TABLE_ROW_TWO }, TABLE_ROW_ID + "=" + rowID, null, null, null, null, null ); TABLE_ROW_ID + "=" + rowID, here "=" is the where clause to select all values you will have to give all column names or you can use a raw query like this db.rawQuery("SELECT * FROM permissions_table WHERE name = 'Comics' ", null); 

और यहां डेटाबेस के लिए एक अच्छा ट्यूटोरियल है

http://www.anotherandroidblog.com/2010/08/04/android-database-tutorial/