基本上,当我尝试在 java 中使用变量更新时,它不起作用 例如:
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' ";
感谢每一位回复
最佳答案
首先:永远不要做你现在尝试的事情:SET Nombre ='"+ nombre + "'
...
这是 SQL 注入(inject)攻击的直接路径。
而是使用带有 SET Nombre=?
等参数的准备好的语句。
第二:只是为了找出查询出了什么问题,只需使用调试器或打印结果更新
字符串,并找出它与工作/硬编码版本有何不同。
仍然必须切换到带有实际代码参数的准备语句
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 查询中多次定义相同的参数。
参数只是
?
标记,索引按照?
从 SQL 查询的开始到结束的显示顺序排列。 - 参数索引以 1 而不是 0 开头
关于java - Mysql 更新不适用于变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52996000/