CodeGym/Java Course/All lectures for MR purposes/PreparedStatement सह कार्य करणे

PreparedStatement सह कार्य करणे

उपलब्ध

विधानांचे प्रकार

सर्वात सोपा स्टेटमेंट इंटरफेस आपण आधीच पाहिला आहे . आणि जरी ते कामासाठी अगदी योग्य असले तरी, जटिल प्रश्नांसाठी ते इतके योग्य नाही. काही स्त्रोतांमध्ये, असे मत व्यक्त केले जाते की विधान वापरणे अजिबात आवश्यक नाही - त्याऐवजी अधिक जटिल आणि अधिक कार्यक्षम रिच इंटरफेस योग्य आहेत.

  • तयार विधान
  • कॉल करण्यायोग्य विधान

एक वाजवी प्रश्न उद्भवतो - या इंटरफेसची आवश्यकता का आहे? चला ते बाहेर काढूया.

प्रथम, आम्ही PreparedStatement इंटरफेस आणि इतर JDBC वैशिष्ट्ये पाहू . आम्ही नंतर कॉलेबल स्टेटमेंट इंटरफेसकडे वळू - त्याचा वापर, प्रथम, इतका सामान्य नाही आणि दुसरे म्हणजे, त्याबद्दल सर्व काही विचारात घेतल्यावर, संभाषण आधीच खूप लहान केले जाऊ शकते.

तसेच, SQL इंजेक्शन नावाच्या डेटाबेस हॅकिंगसाठी प्रीपेर्ड स्टेटमेंट ही एक उत्तम मदत आहे.

पण त्याबद्दल अधिक थोड्या वेळाने.

तयार विधान

तुम्ही PreparedStatement नावाचे भाषांतर करण्याचा प्रयत्न केल्यास , तुम्हाला "तयार विधान" सारखे काहीतरी मिळेल. येथे सर्वात महत्वाचा शब्द "तयार" आहे. "तयारी" म्हणजे काय?

आम्ही या समस्येचा विचार करण्यापूर्वी, मी सोयीच्या दृष्टिकोनातून एक महत्त्वाचा मुद्दा पाहण्याचा प्रस्ताव देतो, जो बर्याचदा घडतो. तर, काही ऍप्लिकेशनमध्ये, आम्हाला कॉन्टॅक्ट टेबलमध्ये कॉन्टॅक्ट डेटा टाकावा लागेल. हे करण्यासाठी, आम्हाला अशी क्वेरी तयार करणे आवश्यक आहे:

INSERT INTO JC_CONTACT (FIRST_NAME, LAST_NAME, PHONE, EMAIL) VALUES (‘Harry’,'Potter','+79112345678','harry@example.com);

पहिल्या दृष्टीक्षेपात, असे दिसते की सर्वकाही इतके अवघड आणि धडकी भरवणारा नाही. आम्हाला एक कोड लिहावा लागेल जो आम्हाला पॅरामीटर्समधून आवश्यक असलेली स्ट्रिंग गोळा करेल: नाव, आडनाव, पत्ता आणि फोन नंबर. तुम्हाला फक्त हे लक्षात ठेवण्याची गरज आहे की सर्व स्ट्रिंग डेटा एकाच कोट वर्णाने वेढलेला असावा.

जर आपण हे वेगळ्या फंक्शनमध्ये केले तर आपल्याला असे काहीतरी मिळेल:

public String buildInsert(String firstName,, String lastName, String phone, String email) {
    String sql = "INSERT INTO JC_CONTACT (FIRST_NAME, LAST_NAME, PHONE, EMAIL)+VALUES ('" + firstName + "','" + lastName + "','" + phone + "','" + email + ")";
    return sql;
}

आम्ही फॉर्ममधील पॅरामीटर फंक्शनमध्ये नाव, आडनाव, फोन नंबर आणि पत्ता पास करतो आणि त्यांच्याकडून आम्ही SQL क्वेरी स्ट्रिंग तयार करतो. कोट्स चित्र थोडे खराब करतात, परंतु आतापर्यंत ते डरावना नाही.

ठीक आहे, संख्यांचे काय? त्यांना अवतरणांनी घेरण्याची गरज नाही. ओपंकी, एका बाबतीत तुम्हाला कोट्सची गरज आहे, दुसऱ्या बाबतीत तुम्हाला नाही. परिस्थिती अधिकच गुंतागुंतीची होत आहे.

आता आणखी एक समस्या जोडूया - जर स्ट्रिंगमध्ये एक सामान्य कोट (आणि एकही नाही) असेल तर? आपण प्रथम अशा कोट्स शोधणे आणि त्यावर प्रक्रिया करणे आवश्यक आहे. Mdaaa. कसेतरी आपल्याला अस्वस्थ वाटू लागते.

जर आम्ही आता तारीख प्रक्रिया जोडली, तर कार्य पूर्णपणे कंटाळवाणे होईल - तुम्हाला मोठ्या प्रमाणात काम करावे लागेल. तारखा सामान्यतः अप्रिय असतात - भिन्न SQL सर्व्हर तारखांसाठी भिन्न स्वरूप स्वीकारतात.

मग आपण काय पाहतो? जर आपल्याला क्वेरीमध्ये पॅरामीटर्स वापरण्याची आवश्यकता असेल, तर मॅन्युअली क्वेरी तयार करणे खूप अप्रिय होते. आणि फक्त अप्रिय नाही - मी कंटाळवाणे देखील म्हणेन. विचारात घेण्यासाठी मोठ्या संख्येने प्रकरणे आहेत आणि हे एक भयानक कंटाळवाणे काम आहे. मुळात, अशा प्रकरणांसाठी प्रीपेर्ड स्टेटमेंट इंटरफेस प्रस्तावित करण्यात आला होता .

ही विनंती तुम्हाला दोन गोष्टी करण्याची परवानगी देते:

  • ज्या ठिकाणी पॅरामीटर्स बदलले जातील ते दर्शविणारी विनंती आगाऊ तयार करा
  • विशिष्ट प्रकारचे पॅरामीटर्स सेट करा आणि नंतर आधीच सेट केलेल्या पॅरामीटर्ससह क्वेरी कार्यान्वित करा

तयार विधान उदाहरण

पॅरामीटर्स सेट करण्याच्या आमच्या पर्यायासाठी PreparedStatement ची रचना अशी दिसेल:

// Example variables
String firstName = "Harry";
String lastName = "Potter";
String phone = "+12871112233";
String email = "harry@example.com";

// Request with indication of places for parameters in the form of "?"
String sql = "INSERT INTO JC_CONTACT (FIRST_NAME, LAST_NAME, PHONE, EMAIL) VALUES (?, ?, ?, ?)";

// Create a request. The con variable is an object of type Connection
PreparedStatement stmt = con.prepareStatement(sql);

// Set parameters
stmt.setString(1, firstName);
stmt.setString(2, lastName);
stmt.setString(3, phone);
stmt.setString(4, email);

// Execute the request
stmt.executeUpdate();

जसे आपण पाहू शकता, सर्वकाही अगदी सोपे आहे.

प्रथम, SQL क्वेरी लिहिताना, ज्या ठिकाणी पॅरामीटर्स बदलणे आवश्यक आहे ते प्रश्नचिन्हांसह लिहिलेले आहेत - “?”.

दुसरे, विनंती con.prepareStatement() वर कॉल करून तयार केली जाते .

तिसरे म्हणजे, पॅरामीटर्सची सेटिंग संख्या आणि मूल्याच्या संकेतातून जाते. कृपया लक्षात घ्या की पॅरामीटर्सची संख्या 1 पासून सुरू होते, 0 पासून नाही, जसे की अॅरे आणि संग्रहांसह काम करताना आपल्याला सवय असते.

PreparedStatement इंटरफेसमध्ये स्ट्रिंग्स — setString() , क्रमांक सेट करण्यासाठी — setInt() , setLong() , setDouble() , तारखा — setDate() सेट करण्यासाठी पद्धती समाविष्ट आहेत . आणि अधिक जटिल प्रकार - हे दस्तऐवजीकरणात पाहिले जाऊ शकते.

चौथे, stmt.executeUpdate() वर कॉल क्वेरी स्ट्रिंग निर्दिष्ट केल्याशिवाय आधीच कार्यान्वित केला जातो.

PreparedStatement सह मित्र बनवण्याची मी जोरदार शिफारस करतो - हे एक अतिशय प्रभावी साधन आहे.

टिप्पण्या
  • लोकप्रिय
  • नवीन
  • जुने
टिप्पणी करण्यासाठी तुम्ही साईन इन केलेले असणे आवश्यक आहे
या पानावर अजून कोणत्याही टिप्पण्या नाहीत