SQL-запрос не возвращает правильный ответ, несмотря на использование правильного синтаксиса SQL - PullRequest
0 голосов
/ 18 октября 2018

Я создал проект на Java, где я пытаюсь создать страницу входа.В моем проекте есть следующие программы в * LoginController.c * RegisterController.c * login.fxml * register.fxml

Для того, чтобы пользователь мог войти в систему, он должен сначала зарегистрироваться как новый пользователь: это делаетсяследующая программа "RegisterController".Он работает отлично. Имя пользователя и пароль добавляются в базу данных MySql IWS в таблице пользователей.

Редактировать 1: мне сказали убрать одинарные кавычки вокруг слова имени пользователя в контроллере регистра в этой функции:

 boolean doesUserExist(String username)
        {
            boolean exist=false;
            String query="SELECT * FROM `users` WHERE username='%s'";

                try
                {
                    ResultSet set=
                            DBConnect.getStatement().executeQuery(String.format(query,username));
                    exist=set.next();
                    set.close();
                }catch(SQLException e)
                {
                    e.printStackTrace();
                }return exist;

        }

Я изменил запрос String, который ранее имел 'username'просто имя пользователя.Тем не менее, вход в систему не работает

package controllers;

import IWS.DBConnect;
import IWS.Main;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;

import java.awt.event.ActionEvent;
import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;

public class RegisterController {

    @FXML
    private GridPane root;

    @FXML
    private PasswordField regpassword;

    @FXML
    private TextField regusername;

    @FXML
    private PasswordField regconpassword;

    @FXML
    private Button toregister;

    @FXML
    private Button backToLogin;

    @FXML
    private Label regstatus;

    @FXML
    void newRegister(javafx.event.ActionEvent event) {
        if(regusername.getText().isEmpty()||regpassword.getText().isEmpty()||
        regconpassword.getText().isEmpty())
        {
            regstatus.setText("please fill all details");
        }
        else if(!regpassword.getText().equals(regconpassword.getText()))
        {regstatus.setText("password do not match");

        }

        else if(doesUserExist(regusername.getText()))
        {
            regstatus.setText("username already exists");
        }

        else
        {
            //register user

                String query = "INSERT INTO `users`( `username`, `password`) VALUES ('%s','%s')";
                query = String.format(query, regusername.getText(), regpassword.getText());

            try
            {
                DBConnect.getStatement().executeUpdate(query);
                regstatus.setText("user registerd");
            }

            catch(SQLException e)
            {
                e.printStackTrace();
            }

        }

    }

    boolean doesUserExist(String username)
    {
        boolean exist=false;
        String query="SELECT * FROM `users` WHERE username='%s'";

            try
            {
                ResultSet set=
                        DBConnect.getStatement().executeQuery(String.format(query,username));
                exist=set.next();
                set.close();
            }catch(SQLException e)
            {
                e.printStackTrace();
            }return exist;

    }

    @FXML
    void openLogin(javafx.event.ActionEvent event)throws IOException {
        Stage loginStage= Main.stage;
        loginStage.setTitle("Login");
        root= FXMLLoader.load(getClass().getResource("/fxml/login.fxml"));
        loginStage.setScene(new Scene(root));
        loginStage.show();

    }

}

Однако в контроллере LoginController, когда я пытаюсь проверить, верны имя пользователя и пароль, введенные пользователем, мне всегда показывают, что имя пользователя и пароль недействительны, несмотря на то, чтоони присутствуют в базе данных MySQL IWS и в таблицах пользователей, поскольку они были добавлены в реестр.Почему это счастье?

package controllers;

import IWS.DBConnect;
import IWS.Main;
import com.sun.org.apache.xerces.internal.util.Status;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;


import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;

import static javafx.fxml.FXMLLoader.load;

public class LoginController {


    @FXML
    private GridPane root;

    @FXML
    private TextField username;

    @FXML
    private PasswordField password;

    @FXML
    private Button login;

    @FXML
    private Button register;

    @FXML
    private Label status;

    @FXML
    void onLogin(javafx.event.ActionEvent event) throws IOException {
        String query="SELECT * FROM `users` WHERE username= 'abc' AND password = 'abc'";
        query=String.format(query,username.getText(),password.getText());

        if(username.getText().isEmpty()||password.getText().isEmpty())
        {
            status.setText("username and password cant be empty");
        }
        else
        {
            try
            {
                ResultSet set= DBConnect.getStatement().executeQuery(query);
                if(set.next())
                {
                    status.setText("Logged in successfully");
                    Stage mainscreenStage= Main.stage;
                    mainscreenStage.setTitle("Register");
                    root=FXMLLoader.load(getClass().getResource("/fxml/mainscreen.fxml"));
                    mainscreenStage.setScene(new Scene(root));
                    mainscreenStage.show();

                }
                else
                {
                    status.setText("invalid username or password");
                }
                set.close();
            }catch (SQLException e)
            {
                e.printStackTrace();
            }
        }



    }

    @FXML
    void onRegister(javafx.event.ActionEvent event)throws IOException {
        Stage registerStage= Main.stage;
        registerStage.setTitle("Register");
        root=FXMLLoader.load(getClass().getResource("/fxml/register.fxml"));
        registerStage.setScene(new Scene(root));
       registerStage.show();



    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...