当前位置: 首页 > 知识库问答 >
问题:

SQL语法错误;检查对应于您的MariaDB服务器版本的手册,以获取要在附近使用的正确语法?密码是?在第1行

戚飞雨
2023-03-14

我试图创建一个基于用户角色的登录程序,但我的代码显示如下错误:

您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册,以了解使用near'的正确语法?密码是什么?”在1号线

void fetchUserData() {
    String query ="SELECT * FROM users WHERE Email LIKE ? AND Password LIKE ? ";
    String EmailValue = Email.getText();
    String PasswordValue = new String(Password.getPassword());
    try {
        PreparedStatement ps = connection.prepareStatement(query);
        ps.setString(1,EmailValue);
        ps.setString(2,PasswordValue);
        ResultSet rs = ps.executeQuery(query);
        ps.executeQuery();
        while(rs.next()) {
            String Email = rs.getString("Email");
            String Password = rs.getString("Password");
            String Role = rs.getString("Role");
            if (Email.equals(EmailValue) && Password.equals(PasswordValue)) {
                if (Role.equals("Admin")) {
                    AdminMenu.setVisible(true);
                    
                } else {
                    Menu.setVisible(true);
                    
                }
            }else {
                System.out.println("Fail");
                
            }
        }
        
    } catch (SQLException e) {
        e.printStackTrace();
        
    }           
}

这是我的连接课程

public class Connect {


private Statement st;

Connection connection;



public Connect() {
    try {
        connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/project","root","");
         st = connection.createStatement();
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    
}

public boolean executeUpdate(String query) {
    try {
        st.executeUpdate(query);
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return false;
    }
    return true;
}

public ResultSet executeQuery(String query) {
    ResultSet rs = null;
    try {
        rs = st.executeQuery(query);
    }catch (SQLException e) {
        e.printStackTrace();
    }
    return rs;
}

public PreparedStatement prepareStatement(String query) {
    PreparedStatement ps = null;
    try {
        ps = connection.prepareStatement(query);
    }catch (SQLException e) {
        e.printStackTrace();
    }
    return ps;
}       

public static void main(String[] args) {
    // TODO Auto-generated method stub

}

}

谢谢你的帮助。

共有1个答案

曹普松
2023-03-14

实际上,您并没有执行preparedStatement,而是执行一个原始查询。这是因为您再次传入查询字符串。

改用ps.executeQuery()

顺便说一下,用“like”来表示这是一个非常糟糕的主意。用户只需对两个值使用“%”即可登录。

 类似资料: