Sentencia MySQL para actualizar correctamente un registro existente desde Java

publicado por: Anonymous

Trato de actualizar los datos de un usuario pero, recibo el error de SQL Syntax:

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 ‘(nombre,
apellido, usuario, contrasena, id_perfil)VALUES (‘Test 1rrr’, ‘Prueba
1’ at line 1

Al cliente hacer clic en el botón actualizar, hago esto:

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);
                }

Código MySQL:

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;
    }

Estoy tratando de indicarle que me actualice los datos del usuario con el id_usuario = ? pero, como el comodín ? del id_usuario está ubicado en el último lugar, se lo paso como el número 6.

Realmente no sé si está correcto, soy novato con SQL.

solución

Me parece que tu sentencia de SQL en tu variable sSQL debería ser así para el UPDATE:

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

En el siguiente link podrás encontrar un tutorial del uso de las sentencias SQL y su sintaxis para las operacines CRUD (SELECT, INSERT, UPDATE y DELETE) utilizanndo MySQL y Java

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *