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

  • CMTelly

    CMTelly

    2 Mayıs 2007
  • dcigs

    dcigs

    9 EYLÜL 2006
  • Makeup Lover

    Makeup Lover

    12 HAZİRAN 2011