2012-09-14 11 views
14

मैं एक MySQL डाटाबेस JDBC ड्राइवर के साथ जावा में एक तैयार बयान और चर बाँध आदेश का उपयोग करके

  • तैयार बयान करने के लिए JDBC कनेक्शन बनाने के लिए

    1. jdbcTemplate उपयोग कर रहा हूँ अपने आप को एसक्यूएल से जितना संभव हो उतना की रक्षा के लिए इंजेक्शन हमलों
    2. एक दर्जन से किसी पर डेटा को सॉर्ट करने के लिए उपयोगकर्ता से अनुरोध स्वीकार करने की जरूरत में
    3. विभिन्न स्तंभों
    4. निम्नलिखित बयान

      jdbcTemplate.query("SELECT * FROM TABLE1 ORDER BY ? ?", colName, sortOrder); 
      

    बेशक यह काम नहीं करता है, क्योंकि परिवर्तनीय बाइंडिंग कॉलम नामों को क्वेरी में अभिव्यक्तियों के लिए केवल पैरामीटर मान निर्दिष्ट नहीं करना चाहिए।

    तो ... लोग इस मुद्दे को कैसे हल कर रहे हैं? जावा कोड में बस ऐसा करना एक आसान समाधान की तरह लगता है, लेकिन चूंकि मुझे कॉलम के लिए सॉर्ट करने के लिए एक चर स्ट्रिंग मिल रही है, और एक वैरिएबल मुझे सॉर्ट ऑर्डर बता रहा है .... यह तुलनित्र-शर्तों की बदसूरत संख्या है आवरण। यह लगता है जैसे कि यह एक आम पैटर्न इसे हल करने के साथ एक आम समस्या नहीं होनी चाहिए ...

  • उत्तर

    16

    प्लेसहोल्डर्स ? केवल पैरामीटर मानों के लिए उपयोग किया जा सकता है लेकिन कॉलम और सॉर्ट ऑर्डर दिशानिर्देशों के साथ नहीं। तो ऐसा करने का मानक तरीका इशारा करता है उदा। hereString#format() या अपनी क्वेरी में अपना कॉलम नाम और ऑर्डर वैल्यू जोड़ने के समान कुछ है।

    एक और विकल्प स्प्रिंग डेटा जेपीए का उपयोग करना है जहां आप तर्क के रूप में अपनी विधि को Sort का उदाहरण दे सकते हैं जिसमें सॉर्ट करने के लिए डेटाबेस के लिए सभी आवश्यक जानकारी हो सकती है।

    2

    मैं सिर्फ स्तंभ नाम और SQL क्वेरी करने के लिए जोड़ होगा, लेकिन बाद ही

    1. कि पुष्टि करने कॉलम नाम और ऑर्डर इस संदर्भ में मान्य हैं।
    2. SQL Injection हमले के किसी भी प्रयास का मुकाबला करने के लिए उन्हें स्वच्छ करना।

    मुझे लगता है कि परिणाम को परत परत में लाने और उन्हें क्रमबद्ध करने की तुलना में यह कुशल है।

    +0

    क्या आप यहां जवाब दे सकते हैं? एक ही समस्या: http://stackoverflow.com/questions/42627074/checking-if-values-is-in-database-with-springboot-exactly-once-called –

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