style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

actualizar/UPDATE base de datos desde java

Todo estaba bien en mi base de datos, podia consultar y guardar registros, hasta que decidi empezar a actualizar utlizando el comando UPDATE; el programa esta hecho en el lenguaje java, cuando intento actualizar el registro me tira el siguiente error:
java.sql.SQLException : parameter index out of range (5> number of parameters, with is 4).
el nombre de la tabla es producto y tiene 5 campos: id, nombre, proveedor, precio, cantidad; todos los campos son tipo varchar.

el codigo del boton modificar es el siguiente:

String sSQL = "";
conectate mysql = new conectate();
Connection cn = mysql.getConnection();
String Id, nom, prov, pre , cant;
Id= txtid.getText();
nom= nombre.getText();
prov= proveedor.getText();
pre= precio.getText();
cant= cantidad.getText();

sSQL = "UPDATE producto " +
"SET nombre = ?," +
"proveedor = ?," +
"precio = ?," +
"cantidad = ?," +
"WHERE id = "+id_actualizar;
/** id_actualizar es una variable de clase y se implementa en el metodo BuscarEditar(String id) donde toma el valor del parametro de dicho metodo*/
String mensaje = "Los datos se han Modoficado de Manera Satisfactoria...";

try
{
PreparedStatement pst = cn.prepareStatement(sSQL);// con esta sentencia se insertan los datos en la base de datos
pst.setString(1, Id);
pst.setString(2, nom);
pst.setString(3, prov);
pst.setString(4, pre);
pst.setString(5, cant);
int n = pst.executeUpdate();//valida si se guardaron los datos; si pst>0 entonces se guardaron

if(n > 0)
{
JOptionPane.showMessageDialog(null, mensaje);
CargarTabla("");//l momento de agregar un nuevo registro, actualiza la tabla
}
}
catch (SQLException ex)
{
JOptionPane.showMessageDialog(null, ex);
}
Seguire investigando para ver como lo soluciono, a todos los que respondan gracias.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de neko069

Tienes:

Tienes:

pst.setString(1, Id);
pst.setString(2, nom);
pst.setString(3, prov);
pst.setString(4, pre);
pst.setString(5, cant);

Peeeero debería ser:

pst.setString(1, nom);
pst.setString(2, prov);
pst.setString(3, pre);
pst.setString(4, cant);

Elimino el primer parámetro, porque no está definido en tu query, o sea que sobra, la excepción dice que te estás pasando por un parámetro. Así lo defines en tu consulta, checa los nombres de los parámetros con los respectivos valores que envías.

una pregunta

Hola buen dia, esta bien como hace el update, no cae uno en eso de que puedan hacer un inject??

Imagen de neko069

Supongo que 4 años después o

Supongo que 4 años después o lo habrán despedido por hacer código como si fuera ingeniero de Sony, o ya cambió la forma de hacer sus actualizaciones, o ya cambió de lenguaje.

y cual seria la mejor forma??

Para evitar problemas con inyecciones, cual seria la mejor forma de hacer actualizaciones o guardar datos??? gracias

Imagen de neko069

Haciendo a un lado que éste

Haciendo a un lado que éste tema se resolvió desde el 2012 ( o corrieron al desarrollador, no lo sé) es conveniente tres cosas.

  • Haz una pregunta aparte, aunque veas que el tema es semejante, para no revolver los temas o preguntas.
  • Checa la fecha de cada tema si crees conveniente hacer un comentario.
  • No, no hay una tercera.

Saludos.

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">