PreparedStatement pps = cn.prepareStatement("UPDATE tb_producto SET cantidad='"+txtcantidad.getText()+"' WHERE nombre='"+txtbuscar.getText()+"'");
Where is the error and how to solve help please!
PreparedStatement pps = cn.prepareStatement("UPDATE tb_producto SET cantidad='"+txtcantidad.getText()+"' WHERE nombre='"+txtbuscar.getText()+"'");
Where is the error and how to solve help please!
The error is that you are misusing the PreparedStatement
, which is an element that exists to write code safe against SQL injection.
When using prepared queries (PreparedStatement), you must place placeholders ( ?
) and pass the data separately, thus avoiding Injection.
Let's see:
/*Aquí escribes una consulta que será preparada (PreparedStatement)
*No pones valores directos en ella, sino que usas ? para cada valor
*Tampocos pones nada entre comillas simples ''*/
String strSQL="UPDATE tb_producto SET cantidad=? WHERE nombre=?";
/*Ahora preparas la consulta*/
PreparedStatement pps = cn.prepareStatement(strSQL);
/*Invocas los métodos adecuados para pasar valores según su tipo en la base de datos
*Si la columna cantidad es numérica en la BD debes usar setInt
*Quizá haga falta parsear a int el valor obtenido con txtcantidad.getText() en ese caso
*Si es del tipo VARCHAR, CHAR, etc, debes usar setString
*IMPORTANTE: Se setean tantos valores como signos de ? hay, en su orden, claro
*Y se empieza desde 1...*/
pps.setInt(1, txtcantidad.getText()); //O bien: pps.setString(1, txtcantidad.getText());
pps.setString(2,txtbuscar.getText());
/*Como info puedes obtener el número de registros actualizados*/
int rowsUpdated = pps.executeUpdate();
System.out.println("Filas actualizadas: " + rowsUpdated);
I recommend that you read the Java documentation tutorial about it.
p>SQL Injection is not something banal. Writing insecure code can cause malicious users to erase your data, take control of your BD and in some cases even your computer.