Where and how the error in this line of SQL and Java is corrected

0
    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!

    
asked by Emmanuel Linares 23.10.2017 в 02:04
source

1 answer

1

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.

    
answered by 23.10.2017 в 02:21