tableColumns
null olduğu gibi tüm sütunlar için SELECT * FROM ...
new String[] { "column1", "column2", ... }olduğu gibi belirli sütunlar için SELECT column1, column2 FROM ...- buraya karmaşık ifadeler de koyabilirsiniz:
new String[] { "(SELECT max(column1) FROM table1) AS max" }size maxmaksimum değerini tutan adlı bir sütun verircolumn1
whereClause
WHEREo anahtar kelime olmadan koyduğunuz kısım , örneğin"column1 > 5"
?dinamik olan şeyleri içermelidir , örneğin "column1=?"-> bakınwhereArgs
whereArgs
- Her doldurur içeriği belirtmek
?üzere whereClausegöründükleri sırayla
diğerleri
- tıpkı
whereClauseanahtar kelimeden sonraki ifade gibi veya nullkullanmıyorsanız.
Misal
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");
aşağıdaki ham sorguya eşdeğerdir
String queryString =
"SELECT column1, (SELECT max(column1) FROM table1) AS max FROM table1 " +
"WHERE column1 = ? OR column1 = ? ORDER BY column1";
sqLiteDatabase.rawQuery(queryString, whereArgs);
Where / Bind -Args versiyonunu kullanarak otomatik olarak kaçan değerler alırsınız ve input-data içeriyorsa endişelenmenize gerek kalmaz '.
Güvensiz: String whereClause = "column1='" + value + "'";
Güvenli:String whereClause = "column1=?";
çünkü değer bir ifadeniz içeriyorsa 'ya kesilir ve istisnalar alırsanız ya da istenmeyen şeyler yaparsanız, örneğin value = "XYZ'; DROP TABLE table1;--"tablonuzu bırakabilir, çünkü ifade iki ifade ve yorum haline gelir:
SELECT * FROM table1 where column1='XYZ'; DROP TABLE table1;--'
args sürümünü kullanıyor XYZ'; DROP TABLE table1;--kaçan olacağını 'XYZ''; DROP TABLE table1;--'ve sadece bir değer olarak ele alınır. 'Kötü şeyler yapma niyetinde olmasa bile , insanların adlarında bunu bulundurmaları veya metinlerde, dosya adlarında, şifrelerde vb. Kullanmaları oldukça yaygındır. Bu nedenle her zaman args sürümünü kullanın. ( intVe diğer ilkelleri doğrudan içine inşa etmek sorun değil whereClause)