tableColumns
null
สำหรับคอลัมน์ทั้งหมดในรูปแบบ SELECT * FROM ...
new String[] { "column1", "column2", ... }
สำหรับคอลัมน์เฉพาะเช่นในSELECT column1, column2 FROM ...
- คุณสามารถใส่นิพจน์ที่ซับซ้อนได้ที่นี่:
new String[] { "(SELECT max(column1) FROM table1) AS max" }
จะให้คอลัมน์ที่มีชื่อว่าmax
ถือค่าสูงสุดเป็นcolumn1
whereClause
- ส่วนที่คุณใส่หลังจาก
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);
โดยใช้ที่ไหน / รุ่นผูก -Args '
คุณจะได้รับค่าหนีโดยอัตโนมัติและคุณจะได้ไม่ต้องกังวลถ้าใส่ข้อมูลประกอบด้วย
ไม่ปลอดภัย: String whereClause = "column1='" + value + "'";
ปลอดภัย:String whereClause = "column1=?";
เพราะหากค่ามี'
คำสั่งของคุณแตกและคุณได้รับข้อยกเว้นหรือทำสิ่งที่ไม่ได้ตั้งใจตัวอย่างเช่นvalue = "XYZ'; DROP TABLE table1;--"
อาจทำให้โต๊ะของคุณหล่นเนื่องจากคำสั่งจะกลายเป็นสองคำสั่งและความคิดเห็น:
SELECT * FROM table1 where column1='XYZ'; DROP TABLE table1;--'
การใช้เวอร์ชัน args XYZ'; DROP TABLE table1;--
จะถูกหลีกเลี่ยง'XYZ''; DROP TABLE table1;--'
และจะถือว่าเป็นค่าเท่านั้น แม้ว่า'
จะไม่ได้มีเจตนาที่จะทำสิ่งที่ไม่ดี แต่ก็ยังคงเป็นเรื่องธรรมดาที่ผู้คนจะมีมันในชื่อของพวกเขาหรือใช้ในข้อความชื่อไฟล์รหัสผ่าน ฯลฯ ดังนั้นควรใช้เวอร์ชัน args เสมอ (สามารถสร้างint
และสิ่งดั้งเดิมอื่น ๆ ได้โดยตรงwhereClause
)