2008-11-29 23 views
8

İşte benim şimdiki SQL deyimi var: Başkajoker karakterler

SEARCH_ALBUMS_SQL = "SELECT * FROM albums WHERE title LIKE ? OR artist LIKE ?;"; 

O tam dönen albüm veya sanatçı adlarına maçları, ama herhangi bir şey değil. İfadede '%' kullanamıyorum ya da hata alıyorum.

Hazırlanan bir bildirime nasıl joker karakterler eklerim?

Teşekkür (ı java5 ve MySQL kullanıyorum)!

+0

İşte [aynı sorunun daha iyi bir sürümü] (http://stackoverflow.com/q/8247970/154527). –

cevap

18

% 'u bağlı değişkene koyarsınız. Yani sen KAÇIŞ eklemek gerekir

stmt.setString(1, "%" + likeSanitize(title) + "%"); 
    stmt.setString(2, "%" + likeSanitize(artist) + "%"); 

yapmak '!', sizin girişlerinizdeki LIKE için önemli olan özel karakterlerden kaçmanıza izin vermek için.

böyle bir yöntemle özel karakterleri (! , %, _ ve [) kaçan tarafından başlık ya da (yukarıda gösterildiği gibi) bunları sterilize edilmelidirsanatçı kullanmadan önce:

public static String likeSanitize(String input) { 
    return input 
     .replace("!", "!!") 
     .replace("%", "!%") 
     .replace("_", "!_") 
     .replace("[", "!["); 
} 
+1

Peki, eğer bağımlı değişkende aslında '%' karakteri varsa? –

+0

@Eric - O zaman eklemeniz gerekmez. SetString içinde başka hiçbir yerde değil, yapmanın büyülü bir yanı yok. –

+4

Bağımlı değişkeniniz bir '%' sözlüğüne sahipse, bunu '\%' olarak atmanız gerekir. Java yöntemi java.lang.String.replace() konusuna bakın. –

İlgili konular