java - How can I get the SQL of a PreparedStatement? -


मेरे पास निम्न विधि हस्ताक्षर के साथ एक सामान्य जावा विधि है:

  निजी स्थिर परिणामस्वरूप runSQLResultSet (स्ट्रिंग एसक्यूएल, ऑब्जेक्ट ... क्वानप्रर्म)  

यह एक कनेक्शन को खोलता है, एसक्यूएल स्टेटमेंट और queryParam में मापदंडों का उपयोग करके एक तैयार की गई अवस्था बनाता है < / Code> चर लंबाई सरणी, इसे चलाता है, ResultSet (एक CachedRowSetImpl में) कैश करता है, कनेक्शन बंद करता है, और कैश्ड परिणाम सेट लौटाता है।

मेरे पास अपवाद हैंडलिंग है जो विधि लॉग करता है मैं लॉग के हिस्से के रूप में SQL कथन लॉग इन करता हूं क्योंकि यह डीबगिंग के लिए बहुत उपयोगी है I मेरी समस्या यह है कि स्ट्रिंग वेरिएबल sql को वास्तविक मानों के बजाय टेम्पलेट स्टेटमेंट को लॉग करता है? मैं निष्पादित (या निष्पादित करने की कोशिश) निष्पादित किया गया वास्तविक कथन लॉग करना चाहता हूं।

इसलिए ... क्या वास्तविक एसक्यूएल कथन प्राप्त करने का कोई तरीका है जो एक तैयार की गई अवस्था ? ( बिना इसे स्वयं बनाते हैं। अगर मुझे तैयार की गई अवस्था एसक्यूएल तक पहुंचने का कोई रास्ता नहीं मिल रहा है, तो शायद मैं इसे अपने पकड़ने में बना सकता हूँ < / Code> es।)

तैयार बयान का प्रयोग करते हुए, "SQL क्वेरी" नहीं है:

  • आपके पास एक बयान है, जिसमें प्लेसहोल्डर्स शामिल हैं
    • इसे डीबी सर्वर पर भेजा जाता है
    • और वहां तैयार
    • जिसका अर्थ है कि SQL कथन है
    • और फिर, आपके पास चर के साथ
      • जो भेजा जाता है
      • और तैयार कथन निष्पादित होता है - उन डेटा पर काम करना

    लेकिन वास्तविक वास्तविक का कोई पुन: निर्माण नहीं है एसक्यूएल क्वेरी - जावा साइड पर न तो, डेटाबेस आधार पर भी।

    इसलिए, तैयार कथन के एसक्यूएल पाने का कोई रास्ता नहीं है- क्योंकि ऐसा कोई एसक्यूएल नहीं है।

    डीबगिंग उद्देश्य के लिए, समाधान ई हैं इसके लिए:

    • प्लेसहोल्डर और डेटा की सूची के साथ कथन का कोड Ouput
    • या "हाथ से" कुछ एसक्यूएल क्वेरी "बिल्ड" करने के लिए।

  • Comments