मैं स्प्रिंग्स jdbctemplate उपयोग कर रहा हूँ और नीचे की तरह एक क्वेरी चलाने में एक सूची
SELECT COLNAME FROM TABLEA GROUP BY COLNAME
पारित कर दिया है, तथापि, स्तंभ नाम, COLNAME
जा रहा है कोई नाम वाले पैरामीटर रहे हैं, होगा उपयोगकर्ता द्वारा पारित किया जाना चाहिए।
प्रश्न
वहाँ, प्लेसहोल्डर के लिए स्तंभ नाम के लिए
?
की तरह एक तरीका है? उदाहरण के लिएSELECT ? FROM TABLEA GROUP BY ?
यदि मैं केवल उपरोक्त क्वेरी को चलाने के लिए और
List<String>
प्राप्त करना चाहता हूं तो सबसे अच्छा तरीका क्या है?
वर्तमान में मैं कर रहा हूँ:
List <Map<String, Object>> data = getJdbcTemplate().queryForList(query);
for (Map m : data)
System.out.println(m.get("COLNAME"));
गतिशील क्वेरी मैं डाल दिया जाएगा जो उपयोगकर्ता मेरी गतिशील क्वेरी जो एक डरावना हिस्सा है में प्रवेश करता है का उपयोग कर में। – birdy
@birdy: आप एक सरल regex '\\ w' का उपयोग करके स्ट्रिंग को केवल 'शब्द वर्ण' की जांच कर सकते हैं। इससे किसी भी एसक्यूएल इंजेक्शन की संभावना को रोका जा सकेगा। –
आपको इस रेगेक्स सामान को करने के बजाय तैयार कथन का उपयोग करना चाहिए। इसे आज़माएं: '' jdbcTemplate() क्वेरी ("चुनें? टैबलेट ग्रुप बाय से?", नया रोमैपर() { सार्वजनिक स्ट्रिंग मैपरो (परिणामसेट आरएस, int rowNum) एसक्यूलेक्सप्शन { रिटर्न आरएस फेंकता है।GetString (1); } }, कॉलनाम, कॉलनाम); '' ' –
Jean