SQLiteDatabase.sorgu yöntemi
SQLiteDatabase sorgu yöntemi kullanıyorum. Nasıl sorgu yöntemi kullanırım?
Bunu denedim:
Cursor cursor = sqLiteDatabase.query(
tableName, tableColumns, whereClause, whereArgs, groupBy, having, orderBy);
tableColumns- sütunlar parametre aşağıdaki gibi inşa edilmiştir.
String[] columns = new String[]{KEY_ID, KEY_CONTENT};
Eğer tüm alanları almamız gerekiyorsa, nasıl sütun inşa edilecek parametre gerekir. Dize dizideki tüm Alan Adları için ihtiyacımız var mı?
Nasıl düzgün bir sorgu yöntemi kullanırım?
CEVAP
tableColumns
SELECT * FROM ...
tüm sütunlar içinnull
SELECT column1, column2 FROM ...
da karmaşık ifadeler buraya koyabilirsiniz: belirli sütunlar içinnew String[] { "column1", "column2", ... }
new String[] { "(SELECT max(column1) FROM table1) AS max" }
sütunmax
adlıcolumn1
maksimum değer tutma verecek
whereClause
- sonra koyduğun bölüm 14* *anahtar kelime, örneğin
"column1 > 5"
olmadan - dinamik, örneğin
"column1=?"
- ^ bu işler için?
içermelidir .whereArgs
bkz
whereArgs
- göründükleri sırada
whereClause
19 *Her doldurur içeriği belirtin
Diğerleri
- eğer gerekli olursa
whereClause
gibi anahtar sonra deyim veyanull
.
Örnek
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 sorgu eşdeğer
String queryString =
"SELECT column1, (SELECT max(column1) FROM table1) AS max FROM table1 "
"WHERE column1 = ? OR column1 = ? ORDER BY column1";
sqLiteDatabase.rawQuery(queryString, whereArgs);
Nerede/- Besten Bağlama sürümünü kullanarak otomatik olarak kaçtı değerleri ve giriş-veri '
varsa endişelenmenize gerek yok.
Güvensiz: String whereClause = "column1='" value "'";
Güvenli: String whereClause = "column1=?";
çünkü eğer değer içeren bir '
ifadeni de sonları ve özel durumlar yoksa istenmeyen şeyler, örneğin value = "XYZ'; DROP TABLE table1;--"
etse dahi, bırakın masanız beri ifade eder hale iki ifade ve bir yorum:
SELECT * FROM table1 where column1='XYZ'; DROP TABLE table1;--'
besten sürümünü kullanarak XYZ'; DROP TABLE table1;--
'XYZ''; DROP TABLE table1;--'
kaçtı olurdu ve tek bir değer olarak tedavi edilmiş olur. '
kötü şeyler yapmaya niyetli değilse bile hala kendi adlarına insanlar var oldukça yaygındır ya, dosya adları, şifreleri vb metinlerde kullanın. Her zaman çalışmaz sürümünü kullanıyor. (Tamam int
ve diğer temel öğeler oluşturmak için doğrudan 35 ** gerçi)
Böyle büyük mükafat yöntemi başvurular...
Geçen ruby'de bir yöntemi parametre ol...
Birden fazla sorgu için PDO desteği (P...
Nasıl bir NameValueCollection içine bi...
Nasıl varlık çerçevesi içinde null değ...