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 max
maksimum değerini tutan adlı bir sütun verircolumn1
whereClause
WHERE
o 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 whereClause
göründükleri sırayla
diğerleri
- tıpkı
whereClause
anahtar kelimeden sonraki ifade gibi veya null
kullanmı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. ( int
Ve diğer ilkelleri doğrudan içine inşa etmek sorun değil whereClause
)