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:'=' 附近的语法不正确的主要内容,如果未能解决你的问题,请参考以下文章