Java SQL — неправильно считывает ввод пользователя (имя пользователя и пароль)

#java #mysql

#java #mysql

Вопрос:

Очевидно, мы застряли в программе входа в систему, потому что она не считывает имя пользователя и пароль. Он запускается, даже если имя пользователя и пароль неверны.

ЭКСПЕРИМЕНТАЛЬНЫЙ РАБОЧИЙ КОД (входит в систему, даже если данные для входа неверны):

 JButton btnLogin = new JButton("Log-In");
    btnLogin.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {



            Connection conn;
            java.sql.PreparedStatement ps;

              try{
                  conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/tupaness","ivanaldwin","frankscanteen");
                  Statement mystmt = conn.createStatement();
                  ps = conn.prepareStatement("SELECT * FROM 'admin' WHERE 'uname' = ? AND 'pass' = ?");


                  String user = uname.getText();   // Collecting the input
                   char[] password = pass.getPassword(); // Collecting the input
                   String pwd = String.valueOf(pass);  // converting from array to string
                   if(validate_login(user,pwd)){

                 /* ps.setString(1, uname.getText());
                  ps.setString(2, String.valueOf(pass.getPassword()));
                  ResultSet result = ps.executeQuery();



                  if(result.next()){
                      JOptionPane.showMessageDialog(null, "Login Success");

                      TupanessHome th = new TupanessHome();
                  }
                  */
                   }
                }catch(Exception e) {
                      JOptionPane.showMessageDialog(null, "An Error has been Detected: n"   e);
                }TupanessHome th = new TupanessHome();
        }

        private boolean validate_login(String user, String pwd) {

            try{           
                   Class.forName("com.mysql.jdbc.Driver");  // MySQL database connection
                   Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/tupaness","ivanaldwin","frankscanteen");     
                   PreparedStatement pst = conn.prepareStatement("Select * from admin where uname=? and pass=?");
                   pst.setString(1, user); 
                   pst.setString(2, pwd);
                   ResultSet rs = pst.executeQuery();                        
                   if(rs.next()){            
                       return true;                
                   }
                   else
                       return false;            
               }
               catch(Exception e){
                   e.printStackTrace();
                   return false;
               }       



        }
    });
    btnLogin.setBounds(65, 117, 89, 23);
    login.getContentPane().add(btnLogin);
  

ДОЛЖЕН БЫТЬ КОД (не могу с этим работать, говорит, что у нас какая-то синтаксическая ошибка)

     JButton btnLogin = new JButton("Log-In");
    btnLogin.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            Connection conn;
            java.sql.PreparedStatement ps;

              try{
                  conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/tupaness","ivanaldwin","frankscanteen");
                  ps = conn.prepareStatement("SELECT * FROM 'admin' WHERE 'uname' = ? AND 'pass' = ?");
                  ps.setString(1, uname.getText());
                  ps.setString(2, String.valueOf(pass.getPassword()));
                  ResultSet result = ps.executeQuery();

                  if(result.next()){
                      JOptionPane.showMessageDialog(null, "Login Success");

                      TupanessHome th = new TupanessHome();
                  }

                }catch(Exception e) {
                      JOptionPane.showMessageDialog(null, "An Error has been Detected: n"   e);
                }
        }
    });
    btnLogin.setBounds(65, 117, 89, 23);
    login.getContentPane().add(btnLogin);
  

Редактировать

Нам удалось исправить ошибку в столбце, но он по-прежнему не входит в систему

   ps = conn.prepareStatement("SELECT * FROM admin WHERE 'uname' = ? AND 'pass' = ?");
  

(Утверждение взято из «ДОЛЖЕН БЫТЬ КОД»)

Комментарии:

1. У вас есть кавычки вокруг имен таблиц и столбцов в вашем SELECT запросе. Вероятно, есть и другие ошибки, но начните с исправления запроса.

2. Хорошо, мы начнем находить эти ошибки, спасибо ^ _ ^

Ответ №1:

 "SELECT * FROM 'admin' WHERE 'uname' = ? AND 'pass' = ?"
  

Должно быть

 "SELECT * FROM `admin` WHERE `uname` = ? AND `pass` = ?"
  

Или даже

 "SELECT * FROM admin WHERE uname = ? AND pass = ?"
  

Комментарии:

1. НАКОНЕЦ-ТО ЭТО СРАБОТАЛО, СПАСИБО YOOOOOOOOOOOOOOOU