Fıkra alternatifleri PreparedStatement?
En iyi çözümler için kullanarak bir SQL IN
fıkra ile örnekleri java.sql.PreparedStatement
, hangi desteklenmiyor için birden çok değer nedeniyle SQL enjeksiyon saldırı güvenlik sorunları: ?
yer tutucu temsil eden tek bir değer yerine bir değerler listesi.
Aşağıdaki SQL deyimi düşünün:
SELECT my_column FROM my_table where search_column IN (?)
preparedStatement.setString( 1, "'A', 'B', 'C'" );
kullanarak aslında ilk başta ?
kullanma nedenleri geçici bir çözüm de çalışmayan bir girişimdir.
Geçici çözümler vardır.
CEVAP
Çeşitli seçenekler mevcuttur, ve her artılarını ve eksilerini analiz here mevcuttur.
Seçenek önerdi:
SELECT my_column FROM my_table WHERE search_column = ?
, her değeri, ve UNİON sonuçları istemci tarafında çalıştırmak için hazırlayın. Gerektirir sadece bir ifadeni. Yavaş ve acı verici.SELECT my_column FROM my_table WHERE search_column IN (?,?,?)
hazırlamak ve çalıştırmak. Gerektirir boyutu---listenin başına bir hazırlanmış deyimi. Hızlı ve belirgin.SELECT my_column FROM my_table WHERE search_column = ? ; SELECT my_column FROM my_table WHERE search_column = ? ; ...
hazırlamak ve çalıştırmak. [Ya o noktalı yeriUNION ALL
kullanın. --ed] bir hazırlanmış deyimi Gerektirir boyutu---listenin başına. Aptalca yavaş, blogger bile önerdi neden bilmiyorumWHERE search_column IN (?,?,?)
daha kesinlikle daha kötü.- Bir saklı yordam sonuç kümesi oluşturmak için kullanın.
- N boyutu---listesinin farklı olması gerekir; ki, 2, 10, ve 50 değerleri ile sorgular.
SELECT my_column FROM my_table WHERE search_column IN (1,2,3,4,5,6,6,6,6,6)
gibi 6 farklı değerler listesi için bir arama yapmak, doldurmak boyutu-10 sorgu. Herhangi bir iyi sunucu sorguyu çalıştırmadan önce dışarı yinelenen değerleri optimize eder.
Bu seçeneklerden hiçbiri süper harika ama.
Yinelenen sorular aynı derecede aklı başında alternatifleri ile bu yerlerde cevaplanmış, hala hiçbiri süper:
- JDBC Prepared Statement, how to set a list?
- PreparedStatement with list of parameters in a IN clause
- How to set list of parameters on prepared statement?
Eğer JDBC4 ve x = ANY(y)
, burada anlatıldığı gibi PreparedStatement.setArray
kullanmak için destekleyen bir sunucu kullanıyorsanız, Doğru Cevap,:
setArray
listeler ile iş yapmak için herhangi bir yol olacak hali yok.
Android/fıkra ve tutucular SQLite...
Bir PreparedStatement yeniden birden ç...
Nerede Bilinmeyen Sütun Fıkra...
İle PreferenceFragment alternatifleri-...
Fıkra ekleme JPA Sorguya Listesi...