com.microsoft.sqlserver.jdbc.SQLServerexception:'=' 附近的语法不正确
Posted
技术标签:
【中文标题】com.microsoft.sqlserver.jdbc.SQLServerexception:\'=\' 附近的语法不正确【英文标题】:com.microsoft.sqlserver.jdbc.SQLServerexception:incorrect syntax near'='com.microsoft.sqlserver.jdbc.SQLServerexception:'=' 附近的语法不正确 【发布时间】:2013-12-28 19:09:15 【问题描述】:我猜我在第一行得到了错误!请帮我处理它。我基本上是在尝试通过我的前端执行查询
try
ResultSet rs=st.executeQuery("select *from Login Username ='"+username+"' and Password '"+password+"'");
rs.last();
int counter = rs.getRow();
if (counter==1)
JOptionPane.showMessageDialog(null,"Username and Password Correct","Username and Password Correct",JOptionPane.INFORMATION_MESSAGE);
this.setVisible(false);
new Menu().setVisible(true);
hide();
else
jt_username.setText("");
jp_password.setText("");
JOptionPane.showMessageDialog(null,"Error","Username and Password Incorrect",JOptionPane.INFORMATION_MESSAGE);
catch (SQLException ex)
JOptionPane.showMessageDialog(null, ex);
【问题讨论】:
我已经用 where 语句替换了我的代码,但现在它显示了 com.microsoft.sqlserver.jdbc.SQLServerexception:incorrect syntax near"。 我可以看到有四个错误。 (1)您不应该以纯文本形式存储密码,对它们进行哈希处理。 (2) 在登录名和用户名之间缺少WHERE
(3) 在密码之后缺少=
。 (4) 易受 SQL 注入影响。使用参数化查询。
非常感谢您的帮助我已经解决了错误,现在它工作得很好:)
如果您所做的只是修复了语法错误,那么它没有工作正常。它将破坏包含单引号的密码/用户名。这也将允许 SQL 注入允许您的登录被完全绕过(或更糟)。
【参考方案1】:
您的 SQL 缺少 WHERE
关键字。试穿这个尺寸:
ResultSet rs=st.executeQuery("select * from Login WHERE Username ='"+username+"' and Password= '"+password+"'");
【讨论】:
请在您的答案中展示如何执行参数化查询。仅仅修复琐碎的语法错误没有任何价值。以上是关于com.microsoft.sqlserver.jdbc.SQLServerexception:'=' 附近的语法不正确的主要内容,如果未能解决你的问题,请参考以下文章