SQL синтаксис ошибки, пожалуйста, проверьте руководство, соответствующее вашей версии сервера MariaDB для правильного использования синтаксиса - PullRequest
1 голос
/ 12 января 2020

Я пытаюсь вставить новое значение в таблицу с помощью prepareStatement, но получаю синтаксическую ошибку, которую не могу устранить.

Java код:

String sql2 = "INSERT INTO Repondre VALUES ( ?, ?, ?, ?)";
preparedStatement = connection.prepareStatement(sql2);
preparedStatement.setInt(1, 1);
preparedStatement.setInt(2, 1);
preparedStatement.setInt(3,resultSet.getInt(1));
RadioButton rb = (RadioButton)q1.getSelectedToggle();
preparedStatement.setString(4,rb.getText().toLowerCase());
preparedStatement.executeUpdate(sql2);

Код ошибки:

java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '?, ?, ?, ?)' at line 1

Я надеюсь, что вы можете помочь мне, спасибо.

1 Ответ

1 голос
/ 12 января 2020

Я вижу несколько потенциальных проблем здесь. Сначала вы передаете строку SQL в executeUpdate(), что неверно. Это неверно, потому что версия того метода, который вы хотите вызвать, предназначена для подготовленных операторов и не принимает никаких входных параметров (вы вызываете версию Statement). Во-вторых, вы забыли перечислить столбцы, которые вы хотите выбрать в своей таблице для вставленных данных. В общем, вы должны всегда явно перечислять все столбцы вставки. Соединяя их вместе, мы можем попробовать следующую исправленную версию:

String sql = "INSERT INTO Repondre (col1, col2, col3, col4) VALUES (?, ?, ?, ?)";
PreparedStatement ps = connection.prepareStatement(sql2);
ps.setInt(1, 1);
ps.setInt(2, 1);
ps.setInt(3, resultSet.getInt(1));
RadioButton rb = (RadioButton)q1.getSelectedToggle();
ps.setString(4, rb.getText().toLowerCase());
preparedStatement.executeUpdate();   // NO parameters here

Примечание. Явное перечисление столбцов важно, потому что вы хотите вставить свои данные в нужное место. Иногда можно было бы не перечислять столбцы, и случайно все данные, о которых вы упомянули, оказались одного типа. Это может привести к незначительной ошибке.

...