SORU
15 Mayıs 2012, Salı


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
15 Mayıs 2012, Salı


tableColumns

  • SELECT * FROM ... tüm sütunlar için null
  • SELECT column1, column2 FROM ... da karmaşık ifadeler buraya koyabilirsiniz: belirli sütunlar için new String[] { "column1", "column2", ... }
    new String[] { "(SELECT max(column1) FROM table1) AS max" } sütun max 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 veya null.

Ö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)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • KendrickLamarVEVO

    KendrickLama

    9 ŞUBAT 2011
  • Matt Davis

    Matt Davis

    4 ŞUBAT 2006
  • Orson Wang

    Orson Wang

    28 EKİM 2006