基本上,当我尝试对Java中的变量使用update时,它不起作用 例如:
String update = "UPDATE Clientes "
+ "SET Nombre ='"+nombre+"' , Apellido='"+apellido+"', Telefono ='"+telefono+"' ,Calle='"+calle+"',NumeroPuerta='"+numpuerta+"' , Localidad ='"+localidad+"' "
+ "WHERE Cedula = '"+ci+"' ";
那是行不通的,但如果我尝试相同但没有变量,它会工作 例如:
String update = "UPDATE Clientes "
+ "SET Nombre ='luciano', Apellido='smith', Telefono ='111111', Calle ='avenue', NumeroPuerta = '456', Localidad='maldonado' "
+ "WHERE Cedula = '123123' ";
感谢每一个响应
答案 0 :(得分:1)
首先:永远不要做您现在尝试的事情:SET Nombre ='" + nombre + "'
...
这是SQL注入攻击的直接路径。
而是使用带有SET Nombre=?
之类的参数的预处理语句。
第二个:仅要查找查询中的问题,只需使用调试器或打印生成的update
字符串,并查找与工作/硬编码版本有何不同。
仍然必须切换到带有真实代码参数的Prepared Statement
UPD:示例(纯JDBC)
假设您已经准备好了java.sql.Connection:
String nombre = "John";
String apellido = "Doe";
String cedula = "12345";
String updQuery = "UPDATE Clientes SET Nombre = ?, Apellido=? WHERE Cedula = ?";
PreparedStatement updStmt = myConnection.prepareStatement(updQuery);
updStmt.setString(1, nombre);
updStmt.setString(2, apellido);
updStmt.setString(3, cedula);
updStmt.execute();
JDBC中有两件事要记住(永远:-)):
?
标记,索引按顺序?
从SQL查询的开始到结束显示。答案 1 :(得分:0)
首先,这种SQL生成将导致您进行Sql注入。您应该使用带有问号的PreparedStatement
并传递变量,Java将处理这些变量以进行sql注入,检查和sql生成