JDBC अपवाद: मान्य SQL कथन के साथ MySQLSyntaxError
इस लेख में, हम डेटा डालने के लिए JDBC का उपयोग करते समय आने वाली समस्या पर चर्चा करते हैं MySQL डेटाबेस. MySQL वर्कबेंच में एक वैध INSERT कथन निष्पादित करने के बावजूद हमें एक MySQLSyntaxError अपवाद प्राप्त हुआ। जी){ यदि(connessioneAperta()){ कोशिश करना{ स्ट्रिंग sqlCommandUser = "उपयोगकर्ता चुनें()"; स्ट्रिंग sqlCommandInserim = "इन्सर्ट इनटू सैल्वेटाग्गी वैल्यूज़ ( ? , ? , डिफॉल्ट , न्यूल );"; तैयार स्टेटमेंट sUser = conn.prepareStatement(sqlCommandUser); ... // उपयोगकर्ता क्वेरी निष्पादित करें तैयार स्टेटमेंट sInserim = conn.prepareStatement(sqlCommandInserim); sInserim.setString(1, उपयोग); sInserim.setString(2, nome); System.out.println(sInserim); sInserim.executeUpdate(sqlCommandInserim); ... //प्रीपर्डस्टेटमेंट्स और रिजल्टसेट बंद करें } पकड़ें(SQLException e){ ई.प्रिंटस्टैकट्रेस(); विवरण झूठा है; } } अन्य विवरण झूठा है; }
स्टैक ट्रेस की जांच:
public static boolean aggiungiElem(String nome, GrafoGenerico g){
if(connessioneAperta()){
try{
String sqlCommandUser = "SELECT USER()";
String sqlCommandInserim = "INSERT INTO salvataggi VALUES ( ? , ? , DEFAULT , NULL );";
PreparedStatement sUser = conn.prepareStatement(sqlCommandUser);
... // Execute user query
PreparedStatement sInserim = conn.prepareStatement(sqlCommandInserim);
sInserim.setString(1, utente);
sInserim.setString(2, nome);
System.out.println(sInserim);
sInserim.executeUpdate(sqlCommandInserim);
... // Close PreparedStatements and ResultSet
}
catch(SQLException e){
e.printStackTrace();
return false;
}
}
else
return false;
}
यह त्रुटि इंगित करती है कि SQL कथन में एक सिंटैक्स त्रुटि है। हालाँकि, हमारा INSERT कथन सही प्रतीत होता है।करीब से निरीक्षण करने पर, हम देखते हैं कि executeUpdate() विधि ReadyedStatement sInserim के बजाय एक स्ट्रिंग तर्क SQLCommandInserim लेता है। यह कोड में एक भूल है।com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? , ? , DEFAULT , NULL )' at line 1
समाधान:
इस समस्या को हल करने के लिए, निम्नलिखित पंक्ति को बदलें:sInserim.executeUpdate (sqlCommandInserim);
With:
sInserim.executeUpdate(sqlCommandInserim);
PreparedStatement पर एक्ज़ीक्यूटअपडेट() को लागू करके, JDBC प्लेसहोल्डर्स को बदल देगा (?) सेटस्ट्रिंग() विधि का उपयोग करके सेट किए गए मानों के साथ, सिंटैक्स त्रुटि को रोकना।
sInserim.executeUpdate();
सभी डेटाबेस को बंद करने के लिए अंततः ब्लॉक का उपयोग करने की भी सिफारिश की जाती है अपवादों की स्थिति में संसाधन लीक को रोकने के लिए ऑब्जेक्ट (तैयार स्टेटमेंट्स, कनेक्शन्स, स्टेटमेंट्स और रिजल्टसेट्स)। अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3