«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему мой код JDBC выдает исключение MySQLSyntaxErrorException, несмотря на использование допустимого оператора INSERT?

Почему мой код JDBC выдает исключение MySQLSyntaxErrorException, несмотря на использование допустимого оператора INSERT?

Опубликовано 7 ноября 2024 г.
Просматривать:694

Why does my JDBC code throw a MySQLSyntaxErrorException despite using a valid INSERT statement?

Исключение 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