Java ';附近的更新查询中出现语法错误;?在eclipse中但在MySQL工作台中工作
我在eclipse中遇到了这个错误 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在“?”附近使用的正确语法,登录名=,pwd=?其中login='pp''位于第1行 这是我在源代码中的查询:Java ';附近的更新查询中出现语法错误;?在eclipse中但在MySQL工作台中工作,java,mysql,sql-update,Java,Mysql,Sql Update,我在eclipse中遇到了这个错误 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在“?”附近使用的正确语法,登录名=,pwd=?其中login='pp''位于第1行 这是我在源代码中的查询: String query2 = "UPDATE usuarios SET nombre = ? , login = ? , pwd = ? WHERE login =
String query2 = "UPDATE usuarios SET nombre = ? , login = ? , pwd = ? WHERE login = '" + login2 + "'";
这是我的方法的全部代码:
private void modificar() {
// Prints the content of the table
String query = "SELECT * FROM usuarios";
try {
pst = con.Conectar().prepareStatement(query);
rs = pst.executeQuery(query);
// Itarate over the registries
int i = 0;
while (rs.next()) {
i++;
//print them
System.out.println(i + " " + rs.getString("id") + " " + rs.getString("login"));
}
//There are X registries
System.out.println("Existen " + i + " usuarios actualmente");
pst.close();
//Wich registry do you need to modify?
System.out.println("Ingrese el login del usuarios a modificar");
String login2 = scanner.nextLine();
System.out.println("Ingrese datos a modificar");
System.out.print("Nombre: ");
nombre = scanner.nextLine();
System.out.print("Login: ");
login = scanner.nextLine();
System.out.print("Password: ");
pwd = scanner.nextLine();
String query2 = "UPDATE usuarios SET nombre = ? , login = ? , pwd = ? WHERE login = '" + login2 + "'";
pst = con.Conectar().prepareStatement(query2);
pst.setString(1, nombre);
pst.setString(2, login);
pst.setString(3, pwd);
/*
* Aqui da error de sintaxis en query2
*/
pst.executeUpdate(query2);
pst.close();
String query3 = "SELECT * FROM usuarios where login =" + login;
pst = con.Conectar().prepareStatement(query3);
rs = pst.executeQuery(query3);
rs.next();
System.out.println("ahora quedo asi " + rs.getString("login"));
} catch (SQLException e) {
// TODO: handle exception
e.printStackTrace();
} finally {
cerrarConsultas();
}
}
但是当我在MySQL工作台中使用它时,它工作得很好,这是我在工作台中的测试
prepare insertar from "UPDATE usuarios SET nombre = ?, login = ?, pwd = ? WHERE login = 'pp'";
-- "UPDATE usuarios SET nombre = ?, login = ?, pwd = ? WHERE login = 'pablo'";
set @nombre = 'pp';
set @login = 'pp';
set @pwd = 'pp';
execute insertar using @nombre, @login, @pwd;
deallocate prepare insertar;
我甚至试过使用文字qoutes,但仍然不起作用
String query2 = "UPDATE usuarios SET `nombre` = ? , `login` = ? , `pwd` = ? WHERE login = '" + login2 + "'";
还尝试:
String query2 = "UPDATE usuarios SET `nombre` = ? , `login` = ? , `pwd` = ? WHERE login = "+ login2;
结果相同。更换
pst.executeUpdate(查询2)代码>
具有
pst.executeUpdate()代码>
否则,您最终将忽略使用各种pst.setString(…)
进行的参数绑定,因此db引擎将收到一个带有?
的查询,而不是您想要绑定的值。为什么不为WHERE子句使用参数
String query2 = "UPDATE usuarios SET nombre = ? , login = ? , pwd = ? WHERE login = ?";
pst = con.Conectar().prepareStatement(query2);
pst.setString(1, nombre);
pst.setString(2, login);
pst.setString(3, pwd);
pst.setString(4, login2 );
我没有使用它,因为我遇到了错误,我不确定问题出在哪里。但现在清楚了,解决了。。。通过你的建议来改进它。非常感谢。