【问题标题】:Java Mysql Prepared statement syntax issueJava Mysql Prepared 语句语法问题
【发布时间】:2016-07-03 12:45:19
【问题描述】:

我在准备好的语句中遇到 SQL 代码语法错误。我已经阅读了网站上的其他答案,但我无法解决这个问题。我的代码如下

     private boolean validate_login(String username,String password) {
   try{           
       Class.forName("com.mysql.jdbc.Driver");  // MySQL database connection
       String url = "jdbc:mysql://localhost/db_webstore";
       String user = "root";
       String pw = "Password";




      String SQL = "select * from tbl-users where Tbl-UsersUserName=? and Tbl-UsersPassword=?";


        Connection conn = DriverManager.getConnection(url, user, pw);
        PreparedStatement pst;
        pst = conn.prepareStatement(SQL);
        pst.setString(1, username); 
       pst.setString(2, password);
        ResultSet rs = pst.executeQuery();                        

        if(rs.next())            
           return true;    
       else
           return false;            
   }
   catch(Exception e){
       e.printStackTrace();
       return false;
   }       


    }     

报错信息如下

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法,以便在 '-users 附近使用 Tbl-Users 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在 '-users where Tbl-Users

附近使用的正确语法

谁能给点建议?提前致谢

【问题讨论】:

  • 我们可以有 tbl-users 结构吗?
  • tbl-users 是有效的表名吗?
  • @richard-faint 这个问题已经为你解答了吗?如果是,您是否介意接受最有帮助的答案以将此问题标记为已解决(请参阅here)...谢谢

标签: java mysql prepared-statement


【解决方案1】:

您的查询中可能缺少一些点。表名和列名需要用点隔开。此外,表名需要引用为-,不允许在未引用的标识符中(参见here):

 String SQL = "select * from `Tbl-Users`"
        + " where `Tbl-Users`.UserName=?"
        + "   and `Tbl-Users`.Password=?";

更新

  • 在有效标识符上添加了指向 MySQL 文档的链接
  • 使用 `
  • 引用表名

【讨论】:

    【解决方案2】:

    您应该在数据库连接中包含端口号(3306 对应于MySQL

    因此,您的代码应按如下方式更正

    private boolean validate_login(String username,String password) {
       try{           
           Class.forName("com.mysql.jdbc.Driver");  // MySQL database connection
           String url = "jdbc:mysql://localhost:3306/db_webstore";
           String user = "root";
           String pw = "Password";
    
    
    
    
          String SQL = "select * from tbl-users where Tbl-UsersUserName=? and Tbl-UsersPassword=?";
    
    
            Connection conn = DriverManager.getConnection(url, user, pw);
            PreparedStatement pst;
            pst = conn.prepareStatement(SQL);
            pst.setString(1, username); 
           pst.setString(2, password); 
            ResultSet rs = pst.executeQuery();                        
    
            if(rs.next())            
               return true;    
           else
               return false;            
       }
       catch(Exception e){
           e.printStackTrace();
           return false;
       }       
    
    
        }  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多