खोज…


टिप्पणियों

एक PreparedStatement गया कथन निष्पादित होने से पहले बयान की घोषणा करता है, और मापदंडों के लिए प्लेसहोल्डर के लिए अनुमति देता है। यह कथन को सर्वर पर एक बार तैयार (और अनुकूलित) करने की अनुमति देता है, और फिर मापदंडों के विभिन्न सेटों के साथ पुन: उपयोग किया जाता है।

पैरामीटर प्लेसहोल्डर्स का अतिरिक्त लाभ यह है कि यह SQL इंजेक्शन से सुरक्षा प्रदान करता है। यह या तो पैरामीटर मानों को अलग से भेजकर प्राप्त किया जाता है, या क्योंकि ड्राइवर मानों को सही ढंग से आवश्यकतानुसार बच जाता है।

तैयारी के लिए मापदंडों की स्थापना

क्वेरी स्ट्रिंग में प्लेसहोल्डर्स को set* विधियों का उपयोग करके सेट करने की आवश्यकता है:

String sql = "SELECT * FROM EMP WHERE JOB = ? AND SAL > ?";

//Create statement to make your operations
PreparedStatement statement = connection.prepareStatement(sql);

statement.setString(1, "MANAGER"); // String value
statement.setInt(2, 2850);         // int value

विशेष स्थितियां

पूर्ण मान सेट करना:

एक शून्य मान सेट करना उदाहरण के लिए setInt और setLong विधियों का उपयोग करके पूरा नहीं किया जा सकता है, क्योंकि ये ऑब्जेक्ट्स ( Integer और Long ) के बजाय आदिम प्रकार ( int और long ) का उपयोग करते हैं, और NullPointerException को फेंकने का कारण होगा:

void setFloat(int parameterIndex, float x) 
void setInt(int parameterIndex, int x) 
void setLong(int parameterIndex, long x)  

setNull का उपयोग करके इन मामलों को संभाला जा सकता है।

setNull(int parameterIndex, int sqlType)

यह टाइप किया गया है, इसलिए दूसरा पैरामीटर प्रदान करना होगा, java.sql.Types देखें

//setting a NULL for an integer value
statement.setNull(2, java.sql.Types.INTEGER);

LOBs सेट करना

LOB को विशेष वस्तुओं का उपयोग करने की आवश्यकता होती है।

Clob longContent = connection.createClob();
Writer longContentWriter = longContent.setCharacterStream(1); // position: beginning
longContentWriter.write("This will be the content of the CLOB");

pstmt = connection.prepareStatement("INSERT INTO CLOB_TABLE(CLOB_VALUE) VALUES (?)");
pstmt.setClob(1, longContent);

set* विधियों पर अपवाद

SQLException - यदि parameterIndex SQL स्टेटमेंट में एक पैरामीटर मार्कर के अनुरूप नहीं है; यदि डेटाबेस एक्सेस एरर आता है या यह विधि एक बंद से PreparedStatement

SQLFeatureNotSupportedException - अगर sqlType एक है ARRAY , BLOB , CLOB , DATALINK , JAVA_OBJECT , NCHAR , NCLOB , NVARCHAR , LONGNVARCHAR , REF , ROWID , SQLXML या STRUCT डेटा प्रकार और JDBC ड्राइवर इस डेटा प्रकार का समर्थन नहीं करता

एक तैयार कथन का मूल उपयोग

यह उदाहरण दिखाता है कि मापदंडों के साथ एक सम्मिलित कथन के साथ एक तैयार कथन कैसे बनाया जाए, उन मापदंडों पर मान सेट करें और फिर कथन को निष्पादित करें।

Connection connection = ... // connection created earlier
try (PreparedStatement insert = connection.prepareStatement(
        "insert into orders(id, customerid, totalvalue, comment) values (?, ?, ?, ?)")) {
    //NOTE: Position indexes start at 1, not 0
    insert.setInt(1, 1);
    insert.setInt(2, 7934747);
    insert.setBigDecimal(3, new BigDecimal("100.95"));
    insert.setString(4, "quick delivery requested");

    insert.executeUpdate();
}

इंसर्ट स्टेटमेंट में प्रश्न चिह्न ( ? ) पैरामीटर प्लेसहोल्डर हैं। वे स्थितीय पैरामीटर हैं जिन्हें बाद में संदर्भित किया जाता है (1-आधारित इंडेक्स का उपयोग करके) उन मापदंडों पर मान सेट करने के लिए setXXX तरीकों का उपयोग करते हुए।

कोशिश-के-संसाधनों का उपयोग यह सुनिश्चित करता है कि कथन बंद है और उस कथन के लिए उपयोग में आने वाले किसी भी संसाधन को जारी किया जाता है।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow