Оператор MySQL для правильного обновления существующей записи из Java

Я пытаюсь обновить данные пользователя, но получаю ошибку синтаксиса SQL:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: в синтаксисе SQL возникла ошибка; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с '(имя, фамилия, пользователь, пароль, идентификатор_профиля) VALUES (' Test 1rrr ',' Test 1 'в строке 1

Для клиента нажмите на кнопку обновить , я делаю это:

dato_usuario.setId_usuario(Integer.parseInt(txtId_Usuario.getText()));
                dato_usuario.setNombre(txtNombre.getText());
                dato_usuario.setApellido(txtApellido.getText());
                dato_usuario.setUsuario(txtUsuario.getText());
                dato_usuario.setContrasena(txtContrasena.getText());
                dato_usuario.setId_perfil(cboPerfil.getSelectedIndex());

// Envío los datos a un método de otra clase que contiene todo para conectarse con MySQL
                if (logica_usuario.actualizar(dato_usuario)) {  // Si el método "actualizar" retorna true
                    JOptionPane.showMessageDialog(null, "El usuario ha sido actualizado.", "Éxito", JOptionPane.INFORMATION_MESSAGE);
                } else {
                    JOptionPane.showMessageDialog(null, "Error!, no se ha podido actualizar el usuario.", "Error", JOptionPane.ERROR_MESSAGE);
                }

MySQL Code :

public boolean actualizar(Dato_usuario d_usr) {
        sSQL =  "UPDATE usuario SET"
                + "(nombre, apellido, usuario, contrasena, id_perfil)"
                + "VALUES (?, ?, ?, ?, ?) WHERE id_usuario=?";

        boolean resultado;

        // Java 7 try-with-resources
        try (PreparedStatement pstm = con.prepareStatement(sSQL)) {

            pstm.setString(1, d_usr.getNombre());
            pstm.setString(2, d_usr.getApellido());
            pstm.setString(3, d_usr.getUsuario());
            pstm.setString(4, d_usr.getContrasena());
            pstm.setInt(5, d_usr.getId_perfil());
            pstm.setInt(6, d_usr.getId_usuario());
            pstm.executeUpdate();

            resultado = true;

        } catch (SQLException e) {
            JOptionPane.showMessageDialog(null, "SQLException:\n" + e, "Error: actualizar(Dato_usuario d_usr)", JOptionPane.ERROR_MESSAGE);
            resultado = false;
            }

        return resultado;
    }

Я пытаюсь скажите ему, чтобы он обновил данные пользователя с помощью id_usuario = ?, но, поскольку подстановочный знак ? из id_usuario находится на последнем месте, я передаю его как номер 6.

Я действительно не знаю, если это верно, я новичок с SQL.

1
задан 21.05.2019, 20:58
1 ответ

Он мне кажется, что твое решение SQL в твоей переменной sSQL deberГ, - чтобы быть asГ - для UPDATE:

sSQL = "UPDATE usuario SET "
+ "nombre = ?"
+ ",apellido = ?"
+ ",usuario = ?"
+ ",contrasena = ?"
+ ",id_perfil = ? "
+ "WHERE id_usuario=?";

В следующий соединение podrГЎs находить руководитель использования решений SQL и Вашего синтаксиса для operacines CRUD (SELECT, INSERT, UPDATE и DELETE) utilizanndo MySQL и Java

1
ответ дан 24.11.2019, 12:18
  • 1
    оно функционировало, но, из-за qué изменения в решении, из-за qué использование запятых и не использование VALUES???, какая-то razó n?. –  RRGT19 01.12.2016, 07:56
  • 2
    Использование одинокого VALUES правильно для решения INSERT, для UPDATE функционируй немного различно. В следующем соединении codejava.net/java-se/jdbc/… podrá s находить пример операций CRUD (SELECT, INSERT, UPDATE, DELETE) с Java и MySQL –  Phi 01.12.2016, 08:03

Теги

Похожие вопросы