2008-11-29 13 views
8

यहाँ मेरे वर्तमान SQL विवरण है: औरवाइल्डकार्ड

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

यह सटीक लौटने एल्बम या कलाकार के नाम करने के लिए मेल खाता है, लेकिन कुछ भी नहीं। मैं कथन में '%' का उपयोग नहीं कर सकता या मुझे त्रुटियां मिलती हैं।

मैं तैयार कथन में वाइल्डकार्ड कैसे जोड़ूं?

धन्यवाद (मैं Java5 और MySQL का उपयोग कर रहा)!

+0

यहां एक [एक ही प्रश्न का बेहतर संस्करण] (http://stackoverflow.com/q/8247970/154527) है। –

उत्तर

18

आपने% को बाध्य चर में रखा है। तो तुम

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

कर आप ESCAPE जोड़ना चाहिए '!' आपको विशेष वर्णों से बचने के लिए आपके इनपुट में पसंद है।

इस तरह की एक विधि के साथ विशेष वर्ण बचने (! , %, _, और [) द्वारा शीर्षक या कलाकार आप उन्हें स्वच्छ चाहिए (जैसा कि ऊपर दिखाया गया है) उपयोग करने से पहले:

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

तो, क्या होगा यदि बाध्य चर में वास्तव में '%' वर्ण था? –

+0

@Eric - तो आपको इसे जोड़ने की आवश्यकता नहीं है। कहीं और की बजाय सेटस्ट्रिंग में ऐसा करने के बारे में जादुई कुछ भी नहीं है। –

+4

यदि आपके बाध्य चर के पास एक शाब्दिक '%' है तो आपको इसे '\%' से बचाना चाहिए। जावा विधि java.lang.String.replace() देखें। –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^