【问题标题】: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 注入允许您的登录被完全绕过(或更糟)。

标签: java sql sql-server sql-server-2008 jdbc


【解决方案1】:

您的 SQL 缺少 WHERE 关键字。试穿这个尺寸:

ResultSet rs=st.executeQuery("select * from Login WHERE Username ='"+username+"' and Password=  '"+password+"'");

【讨论】:

  • 请在您的答案中展示如何执行参数化查询。仅仅修复琐碎的语法错误没有任何价值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-20
  • 1970-01-01
  • 2017-08-28
  • 2015-12-12
  • 2013-12-16
  • 1970-01-01
  • 2018-08-14
相关资源
最近更新 更多