Исключение JDBC: MySQLSyntaxError с действительным оператором SQL
В этой статье мы углубимся в проблему, возникающую при использовании JDBC для вставки данных в База данных MySQL. Мы получили исключение 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 вместо ReadedStatement sInserim. Это недосмотр в коде.
Решение:
Чтобы устранить эту проблему, замените следующую строку:
sInserim.executeUpdate(sqlCommandInserim);
With:
sInserim.executeUpdate();
Вызывая метод ExecuteUpdate() в ReadedStatement, JDBC заменит заполнители (?) со значениями, установленными с помощью метода setString(), что предотвращает синтаксическую ошибку.
Дополнительные соображения:
Также рекомендуется использовать блокfinally для закрытия всей базы данных объекты (PreparedStatements, Connections, Statements и ResultSets) для предотвращения утечек ресурсов в случае исключений.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3