हमेशा का उपयोग करें "तैयार" वहाँ prepareStatement लेकिन सटीक समारोह नाम के एक बराबर अपने डेटाबेस और ड्राइवर संयोजन पर निर्भर करेगा हो जाएगा।
एक निष्पादित (स्ट्रिंग) पर एक तैयार बयान के कई फायदे हैं: -
बयान पार्स किया गया है और एक पहुँच योजना determind केवल एक बार जब "तैयार" बयान निष्पादित किया जाता है। इस पर निर्भर करते हुए कि आप कितनी बार कथन चलाते हैं, यह परिणामस्वरूप बेहतर प्रदर्शन कर सकता है।
जब आप इसे setString() के माध्यम से पास करते हैं तो आपको स्ट्रिंग डेटा में विशेष वर्णों के बारे में चिंता करने की आवश्यकता नहीं है। निष्पादन (स्ट्रिंग) में डेटा में किसी भी एकल उद्धरण या अर्धविराम के परिणामस्वरूप एक पार्स त्रुटि होगी।
इससे भी बदतर यह है कि "एसक्यूएल इंजेक्शन" हमले कैसे काम करते हैं। यदि cust_table ; से "x" जैसे स्ट्रिंग को _ तालिका ; से हटाएं "डेटा के रूप में दर्ज किया गया है, तो इसके परिणामस्वरूप हटाए गए कथन को पार्स और निष्पादित किया जा सकता है।
संख्याओं का संचालन करना अधिक कुशल है। एक setInt कॉल एक पूर्णांक मान लेता है जैसा कि समतुल्य SQL स्ट्रिंग के लिए आपको वर्णों में परिवर्तित करना होगा, फिर डीबीएमएस को इसे एक पूर्णांक में परिवर्तित करना होगा।
पठनीयता। आप कुछ प्रश्न चिह्नों के साथ एक एकल SQL कथन कोड करते हैं जहां वेरिएबल जाते हैं जो पढ़ने के लिए अपेक्षाकृत आसान होते हैं, क्योंकि स्ट्रिंग कॉन्सटेनेशन की श्रृंखला को मानसिक रूप से विश्लेषण और विश्लेषण करने के विपरीत, बच निकले उद्धरण आदि के लिए अतिरिक्त शोर होगा।
हालांकि कुछ मामलों जहां निष्पादन (स्ट्रिंग) वास्तव में बेहतर है।
जहां आपकी चाबियां बहुत असमान रूप से वितरित की जाती हैं। E.G. यदि आपके 95% ग्राहक संयुक्त राज्य अमेरिका में रहते हैं और आप कनाडा में रहने वाले 4% को सूचीबद्ध करना चाहते हैं तो "देश = =" आम तौर पर "जहां देश = 'सीए" के साथ एक टेबल स्पेस स्कैन होता है, तो आपके पास इंडेक्स का उपयोग करने का कुछ मौका होता है।
दूसरा मामला यह है कि उपयोगकर्ता कई खोज मानदंडों को दर्ज या छोड़ सकता है। इनपुट मानदंडों के सभी संभावित अनुमोदनों के साथ एक जटिल क्वेरी बनाने के मुकाबले दिए गए मानदंडों के लिए एक एसक्यूएल स्ट्रिंग बनाने के लिए यह बेहतर है।
स्रोत
2009-01-05 13:42:39
धन्यवाद के लिए SOCI - The C++ Database Access Library कहा जाता है, कैसे ग में रोकने के लिए ++? – yesraaj
कोई विचार नहीं, सी ++ चाय का मेरा प्याला नहीं है। :) – Bombe