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
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();
}
}
Android mağaza SQLite'veritabanı ...
Nasıl bir Android uygulaması içinde bi...
Android SQLite kullanarak yabancı anah...
Nasıl '' Android uygulaması ...
Android SQLite için en iyi uygulamalar...