जब आप किसी setXxx()
. पर कॉल करेंगे तो आपको यह त्रुटि मिलेगी PreparedStatement
. पर तरीके , जबकि SQL क्वेरी स्ट्रिंग में कोई प्लेसहोल्डर नहीं है ?
इसके लिए।
उदाहरण के लिए यह गलत है :
String sql = "INSERT INTO tablename (col1, col2, col3) VALUES (val1, val2, val3)";
// ...
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, val1); // Fail.
preparedStatement.setString(2, val2);
preparedStatement.setString(3, val3);
प्लेसहोल्डर्स को निर्दिष्ट करने के लिए आपको तदनुसार SQL क्वेरी स्ट्रिंग को ठीक करने की आवश्यकता है।
String sql = "INSERT INTO tablename (col1, col2, col3) VALUES (?, ?, ?)";
// ...
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, val1);
preparedStatement.setString(2, val2);
preparedStatement.setString(3, val3);
ध्यान दें कि पैरामीटर इंडेक्स 1
से शुरू होता है और यह कि आप नहीं . करते हैं उन प्लेसहोल्डर्स को इस तरह उद्धृत करने की आवश्यकता है:
String sql = "INSERT INTO tablename (col1, col2, col3) VALUES ('?', '?', '?')";
अन्यथा आप अभी भी वही अपवाद प्राप्त करेंगे, क्योंकि SQL पार्सर तब उन्हें वास्तविक स्ट्रिंग मानों के रूप में व्याख्या करेगा और इस प्रकार प्लेसहोल्डर को अब और नहीं ढूंढ सकता है।