استثناء JDBC: خطأ MySQLSyntaxError مع بيان SQL صالح
في هذه المقالة، نتعمق في مشكلة تمت مواجهتها عند استخدام JDBC لإدراج البيانات في ملف قاعدة بيانات ماي اس كيو ال. لقد تلقينا استثناء MySQLSyntaxError على الرغم من تنفيذ عبارة INSERT صالحة في MySQL Workbench.
للتحقق من السبب الأساسي، دعنا نحلل الكود:
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;
}
فحص تتبع المكدس:
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
يشير هذا الخطأ إلى وجود خطأ في بناء الجملة في عبارة SQL. ومع ذلك، يبدو أن بيان INSERT الخاص بنا صحيح.
عند الفحص الدقيق، نلاحظ أن أسلوب executeUpdate() يأخذ وسيطة سلسلة SQLCommandInserim بدلاً من sInserim PreviewdStatement. هذا خطأ في الكود.
الحل:
لحل هذه المشكلة، استبدل السطر التالي:
sInserim.executeUpdate(sqlCommandInserim);
مع:
sInserim.executeUpdate();
من خلال استدعاء ExecuteUpdate() في PreparationStatement، سيحل JDBC محل العناصر النائبة (؟) مع القيم التي تم تعيينها باستخدام طريقة setString ()، لمنع حدوث خطأ في بناء الجملة.
اعتبارات إضافية:
يوصى أيضًا باستخدام الكتلة النهائية لإغلاق قاعدة البيانات بالكامل الكائنات (PreparedStatements، وConnections، وStats، وResultSets) لمنع تسرب الموارد في حالة وجود استثناءات.تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3