2011-02-08 13 views
15

में (?) है? क्या मेरे पास स्ट्रिंग जावा के लिए प्लेसहोल्डर है जैसे कि हमारे पास एसक्यूएल तैयार कथन हैं?क्या हमारे पास स्ट्रिंग के लिए जावा में कुछ प्लेसहोल्डर हैं क्योंकि हमारे पास एसक्यूएल तैयार कथन

उदाहरण के विचार के लिए है कि मैं string St = "akkk ? la,ala ? " ,

अब मैं के मूल्यों को निर्धारित करना चाहते हैं? जैसा कि मैंने इसे एसक्यूएल तैयार कथन st.setStingValue (1, "अक्षय") में सेट किया है; // क्या हमारे पास ऐसा कुछ है? सेंटसेटस्ट्रिंगवैल्यू (2, "अंजाया");

उत्तर

32

आप String.Format

String st = "akkk %s la,ala %s "; 
String result = String.format(st, "First Val", "Second Val"); 

वैकल्पिक रूप से उपयोग कर सकते हैं, तो आप सांख्यिक पदों

String st = "akkk %1$s la,ala %2$s "; 
String result = String.format(st, "First Val", "Second Val"); 
-1

आप उसी प्रभाव को प्राप्त करने के लिए स्ट्रिंग ऑफ़ स्ट्रिंग का उपयोग कर सकते हैं।
इसके बारे में यहाँ पढ़ें: http://www.roseindia.net/java/string-examples/string-replacefirst.shtml

+0

एक स्ट्रिंग को अलग-अलग बनाना, तैयार कथन का उपयोग करने जैसा नहीं है, जहां मान डेटाबेस में भेजी गई क्वेरी का हिस्सा नहीं हैं –

1

replaceFirst देख सकते हैं का उपयोग कर सकते() इस मामले में बुरा विचार है - दूसरा तर्क अगर दूसरा तर्क एक रेगेक्स होने की उम्मीद है जी में अनुक्रम होते हैं जिन्हें रेगेक्स प्रोसेसिंग निर्देशों के रूप में व्याख्या किया जाता है। समूह संदर्भ (जैसे '$') के रूप में आपको क्वेरी डीबी ऑपरेशन में अपवाद मिलेगा - क्वेरी पर पास किए गए डेटा के आधार पर।

0

यहां मेरी विविधता है।

public class SimplePrepareStatement { 
    String vars[]; 
    String query; 

    public SimplePrepareStatement(String query) { 
     int countVars = StringUtils.countMatches(query, "?"); 
     vars = new String[countVars]; 
     this.query = query.replaceAll("\\?", "%s"); 
    } 

    public void setDouble(int i, Double arg0) { 
     vars[i-1] = "'"+arg0+"'"; 
    } 

    public void setString(int i, String arg0) { 
     vars[i-1] = "'"+arg0+"'"; 
    } 

    public void setObject(int i, String arg0) { 
     vars[i-1] = arg0; 
    } 

    public String getSQL() { 
     return String.format(query, vars); 
    } 
} 

नोट! यह एसक्यूएल उपयोग, संभव SQLinjections, बस समान व्यवहार के लिए नहीं है।

@Test 
public void simplePrepareStatementTest() { 
    SimplePrepareStatement st = new SimplePrepareStatement("abc ? abc ?"); 
    st.setString(1, "a"); 
    st.setString(2, "b"); 
    assertEquals("abc 'a' abc 'b'", st.getSQL()); 
    st.setObject(1, "obj"); 
    assertEquals("abc obj abc 'b'", st.getSQL()); 
} 
संबंधित मुद्दे