Statement ऑब्जेक्ट का उपयोग करके स्टेटमेंट निष्पादित करते समय, विशेष रूप से INSERT स्टेटमेंट, हर बार जब क्वेरी निष्पादित होती है तो पूरा स्टेटमेंट बार-बार संकलित और निष्पादित होता है, जहां इन स्टेटमेंट के बीच एकमात्र अंतर स्टेटमेंट के मान होते हैं।
जबकि, PreparedStatement एक पूर्व-संकलित स्टेटमेंट है यानी क्वेरी संकलित होकर डेटाबेस में संग्रहीत होती है, मानों के बजाय प्लेसहोल्डर (?) का उपयोग करके और इन प्लेसहोल्डर को मान बाद में प्रदान किए जाते हैं।
इस प्रकार, स्टेटमेंट के अनावश्यक संकलन और बार-बार निष्पादन से बचा जाता है।
उदाहरण
मान लें, हमारे पास डेटाबेस में Dataset नाम की एक टेबल है जिसमें mobile_brand और unit_sale कॉलम हैं, अगर हम Statement ऑब्जेक्ट का उपयोग करके इस टेबल में रिकॉर्ड डालना चाहते हैं तो कोड इस तरह होगा:
stmt.executeUpdate("insert into Dataset values('Iphone', 3000)"); stmt.executeUpdate("insert into Dataset values(&'Samsung', 4000)"); stmt.executeUpdate("insert into Dataset values('Nokia', 5000)"); stmt.executeUpdate("insert into Dataset values('Vivo', 1500)"); stmt.executeUpdate("insert into Dataset values('Oppo', 9000)"); stmt.executeUpdate("insert into Dataset values('MI', 6400)"); stmt.executeUpdate("insert into Dataset values('MotoG', 4360)"); stmt.executeUpdate("insert into Dataset values('Lenovo', 4100)"); stmt.executeUpdate("insert into Dataset values('RedMi', 4000)"); stmt.executeUpdate("insert into Dataset values('OnePlus', 6334)");और हर executeUpdate() मेथड इनवोकेशन पर इसमें पूरा स्टेटमेंट संकलित और निष्पादित होता है। यहां, यदि आप देखें तो केवल स्टेटमेंट के मान बदल रहे हैं और शेष क्वेरी अनावश्यक रूप से संकलित हो रही है।
यदि आप उसी टेबल में समान डेटा डालने के लिए PreparedStatement का उपयोग करके INSERT क्वेरी लिखते हैं, तो कोड इस तरह दिखता है:
PreparedStatement pstmt = con.prepareStatement("insert into Dataset values(?, ?)"); pstmt.setString(1, "Iphone"); pstmt.setInt(2, 3000); pstmt.executeUpdate(); pstmt.setString(1, "Samsung"); pstmt.setInt(2, 4000); pstmt.executeUpdate(); pstmt.setString(1, "Nokia"); pstmt.setInt(2, 5000); pstmt.executeUpdate(); pstmt.setString(1, "Vivo"); pstmt.setInt(2, 1500); pstmt.executeUpdate(); pstmt.setString(1, "Oppo"); pstmt.setInt(2, 900); pstmt.executeUpdate(); pstmt.setString(1, "MI"); pstmt.setInt(2, 6400); pstmt.executeUpdate(); pstmt.setString(1, "MotoG"); pstmt.setInt(2, 4360); pstmt.executeUpdate(); pstmt.setString(1, "Lenovo"); pstmt.setInt(2, 4100); pstmt.executeUpdate(); pstmt.setString(1, "RedMi"); pstmt.setInt(2, 4000); pstmt.executeUpdate(); pstmt.setString(1, "MotoG"); pstmt.setInt(2, 4360); pstmt.executeUpdate(); pstmt.setString(1, "OnePlus"); pstmt.setInt(2, 6334); pstmt.executeUpdate();यहां यदि आप देखें तो INSERT क्वेरी प्लेसहोल्डर (?) के साथ तैयार की गई है और यह क्वेरी संकलित होकर डेटाबेस में संग्रहीत होती है और बाद में PreparedStatement इंटरफ़ेस के सेटर मेथड का उपयोग करके मान पास किए जाते हैं, जिससे स्टेटमेंट के अनावश्यक निष्पादन से बचा जाता है।