tableColumns
null
के रूप में सभी स्तंभों के लिए SELECT * FROM ...
new String[] { "column1", "column2", ... }
विशिष्ट कॉलम के लिए जैसे SELECT column1, column2 FROM ...
- आप यहां जटिल अभिव्यक्ति भी रख सकते हैं:
new String[] { "(SELECT max(column1) FROM table1) AS max" }
आपको max
अधिकतम मूल्य रखने वाले एक कॉलम का नाम देगाcolumn1
कहां कारण
WHERE
उस कीवर्ड के बिना आपके द्वारा डाला गया हिस्सा , जैसे"column1 > 5"
- उन
?
चीजों के लिए शामिल होना चाहिए जो गतिशील हैं, जैसे "column1=?"
-> देखेंwhereArgs
whereArgs
- सामग्री है कि प्रत्येक भरता निर्दिष्ट
?
में whereClause
क्रम में वे दिखाई देते हैं
दूसरे
- जैसे
whereClause
कि कीवर्ड के बाद का स्टेटमेंट या null
यदि आप इसका उपयोग नहीं करते हैं।
उदाहरण
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;--'
जाएगा और केवल एक मूल्य के रूप में माना जाएगा। यहां तक कि अगर '
बुरा काम करने का इरादा नहीं है, तो यह अभी भी काफी सामान्य है कि लोगों के पास उनके नामों में है या इसका उपयोग ग्रंथों, फाइलनाम, पासवर्ड आदि में किया जाता है, इसलिए हमेशा आर्ग्स संस्करण का उपयोग करें। ( हालांकि निर्माण int
और अन्य प्राइमरी को सीधे इसमें शामिल करना ठीक है whereClause
)