"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > मैं जेडीबीसी में आईएन क्लॉज को प्रभावी ढंग से कैसे पैरामीटराइज़ कर सकता हूं?

मैं जेडीबीसी में आईएन क्लॉज को प्रभावी ढंग से कैसे पैरामीटराइज़ कर सकता हूं?

2024-11-02 को प्रकाशित
ब्राउज़ करें:211

How can I parameterize an IN clause in JDBC effectively?

जेडीबीसी पैरामीटराइज़िंग इन क्लॉज: एक कुशल दृष्टिकोण

आईएन क्लॉज क्वेरी से निपटते समय, जैसे SELECT * FROM MYTABLE जहां MYCOL ( ?), पैरामीटराइज़िंग तर्क सुरक्षा और दक्षता सुनिश्चित करता है। हालांकि जेडीबीसी प्रत्यक्ष समाधान प्रदान नहीं करता है, कुछ ड्राइवर ReadyedStatement#setArray() का समर्थन कर सकते हैं।

पैरामीटरीकरण के लिए सहायक तरीके

प्रत्यक्ष समर्थन के अभाव में, आप IN क्लॉज और सेट मानों के लिए प्लेसहोल्डर उत्पन्न करने के लिए सहायक तरीकों का लाभ उठा सकते हैं गतिशील। ... मान)

: का उपयोग करके लूप में मान सेट करता है ReadyedStatement#setObject().
  • उदाहरण कार्यान्वयन
  • निम्न डेटा एक्सेस विधि पर विचार करें:
निजी स्थिर अंतिम स्ट्रिंग SQL_FIND = "उस इकाई से आईडी, नाम, मान चुनें जहां आईडी (%s)"; सार्वजनिक सूची ढूँढें(सेट आईडी) SQLException फेंकता है { सूची इकाइयां = नई ArrayList(); स्ट्रिंग एसक्यूएल = स्ट्रिंग.फॉर्मेट(एसक्यूएल_FIND, प्रिपेयरप्लेसहोल्डर्स(आईडी.साइज())); कोशिश ( कनेक्शन कनेक्शन = dataSource.getConnection(); तैयारस्टेटमेंट कथन = कनेक्शन.तैयारस्टेटमेंट(एसक्यूएल); ) { setValues(कथन, ids.toArray()); प्रयास करें (परिणामसेट परिणामसेट = कथन.executeQuery()) { जबकि (resultSet.next()) { इकाइयाँ.जोड़ें(मानचित्र(परिणामसेट)); } } } वापसी इकाइयाँ; }

मुख्य विचार

private static final String SQL_FIND = "SELECT id, name, value FROM entity WHERE id IN (%s)";

public List find(Set ids) throws SQLException {
    List entities = new ArrayList();
    String sql = String.format(SQL_FIND, preparePlaceHolders(ids.size()));

    try (
        Connection connection = dataSource.getConnection();
        PreparedStatement statement = connection.prepareStatement(sql);
    ) {
        setValues(statement, ids.toArray());

        try (ResultSet resultSet = statement.executeQuery()) {
            while (resultSet.next()) {
                entities.add(map(resultSet));
            }
        }
    }

    return entities;
}
यह दृष्टिकोण विभिन्न डेटाबेस में पोर्टेबिलिटी सुनिश्चित करता है SQL स्टेटमेंट जेनरेशन को वैल्यू सेटिंग से अलग करके।

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3