SORU
14 EYLÜL 2011, ÇARŞAMBA


Android/fıkra ve tutucular SQLite

Android içinde aşağıdaki sql sorgu girişimde bulunuyorum:

    String names = "'name1', 'name2";   // in the code this is dynamically generated

    String query = "SELECT * FROM table WHERE name IN (?)";
    Cursor cursor = mDb.rawQuery(query, new String[]{names});

Ancak, android doğru değerlerle soru işareti yerine geçmez. Bu sql enjeksiyon karşı koruma sağlamaz ancak aşağıdakileri yapabilirim:

    String query = "SELECT * FROM table WHERE name IN ("   names   ")";
    Cursor cursor = mDb.rawQuery(query, null);

Bu sorunu nasıl ve tümce İÇİNDE kullanabilir miyim?

Teşekkürler.

CEVAP
14 EYLÜL 2011, ÇARŞAMBA


Bir dize şeklinde "?, ?, ..., ?" bir dinamik olarak oluşturulan dize ve güvenli bir şekilde koy içine orijinal SQL sorgu (çünkü kısıtlı bir form içeren bir dış veri) ve daha sonra yer tutucu olarak kullanılabilir normal.

len soru işaretleri virgül ile ayrılmış: döndüren bir fonksiyon String makePlaceholders(int len) düşünün

String[] names = { "name1", "name2" }; // do whatever is needed first
String query = "SELECT * FROM table"
      " WHERE name IN ("   makePlaceholders(names.length)   ")";
Cursor cursor = mDb.rawQuery(query, names);

Sadece emin yerler tam olarak, birçok değerleri geçirmek için yapmak. Varsayılan maksimum SQLite limit of host parameters 999 - en azından normal yapılı, Android:) hakkında emin değilim

Mutlu kodlama.


Burada bir uygulama:

String makePlaceholders(int len) {
    if (len < 1) {
        // It will lead to an invalid query anyway ..
        throw new RuntimeException("No placeholders");
    } else {
        StringBuilder sb = new StringBuilder(len * 2 - 1);
        sb.append("?");
        for (int i = 1; i < len; i  ) {
            sb.append(",?");
        }
        return sb.toString();
    }
}

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • dope2111

    dope2111

    29 HAZİRAN 2009
  • Jonathan Flavell

    Jonathan Fla

    1 HAZİRAN 2006
  • Smith Micro Graphics

    Smith Micro

    15 Mayıs 2008