java程序中的SQL查询错误

时间:2017-01-20 07:32:54

标签: java sql

我开发了一个java程序,我需要更新并插入用户的登录详细信息。我创建了两个文本域,两个按钮名称添加用户并编辑用户。当我在用户成功添加到数据库的两个文本字段中输入用户名和密码时,错误在编辑用户中,我想根据用户名更新用户的密码, 我在尝试更新用户时遇到SQL错误,

这是我的SQL查询,用于根据用户名

更新用户的密码
String sql = "UPDATE Admin SET password='"+JT_pass1.getText()+"' WHERE
username = "+JT_username1.getText();  

当我执行即时收到此错误时,

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 
'sss' in 'where clause'  

“sss”是我输入的用户名字段, Mysql数据库我有admin表,它由两列admin和username组成,

我无法弄清楚我哪里出错了,请高兴地感谢任何帮助。

3 个答案:

答案 0 :(得分:4)

您当前的问题是您忘记在查询中的用户名周围放置单引号。因此,数据库将sss解释为列。但你应该真正使用准备好的陈述:

String query = "UPDATE Admin SET password=? WHERE username = ?";
PreparedStatement update = con.prepareStatement(query);
update.setString(JT_pass1.getText());
update.setString(JT_username1.getText());
update.executeUpdate();

使用预准备语句有很多好处。首先,它会自动处理字符串和其他类型数据的正确转义。此外,它还可以防止SQL注入发生。

答案 1 :(得分:2)

要使其正常工作,您需要在用户名周围添加引号,如下所示:

  String sql = "UPDATE Admin SET password='"+JT_pass1.getText()+"' WHERE
username = '"+JT_username1.getText()+"'";

但是,以这种方式更新数据库容易受到SQL injection的攻击,因此使用Prepared Statements会更好。

答案 2 :(得分:1)

考虑" JT_username1.getText()"作为查询字符串的一部分,您必须将其括在适当的引号下。 与添加" JT_pass1.getText()"相同在单引号和双引号之间,你必须添加" JT_username1.getText()"同样。

String sql = "UPDATE Admin SET password='" + JT_pass1.getText() + "' WHERE username = '"+JT_username1.getText()+"'";