JavaFX - funkcja logowania

0

Witam. Tworząc projekt postanowiłem podzielić go na części. Jedną z nich jest logowanie. Co należałoby w nim poprawić?
Klasa Main:

package classes;

import javafx.application.Application;
import javafx.stage.Stage;

public class Main extends Application {

    // Obejcts from other classes
    Login Logging_session = new Login();

    // Starting Parameters
    @Override
    public void start(Stage primaryStage) {
        Logging_session.Display();
        primaryStage.setScene(Logging_session.login_window.scene);
        primaryStage.setTitle("Logging Session");
        primaryStage.show();
    }
    // Main Fuction
    public static void main(String[] args) {
        launch(args);
    }
}

Klasa Login:

package classes;

import javafx.geometry.Pos;
import javafx.scene.control.Button;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;
import javafx.scene.text.Text;

// The class responsible for the login function
public class Login {

    // Objects from other Classes
    MySql sql_login = new MySql();
    Window login_window = new Window(1,400,200,5,5,"Logging_session");

    // Buttons
    Button sign = new Button();

    // TextFields and PasswordFields
    TextField username = new TextField();
    PasswordField pass = new PasswordField();

    // Texts and Labels
    Text username_text = new Text("Username");
    Text password_text = new Text("Password");

    // Showing the login window
    public void Display(){
        login_window.Set();
        login_window.layout_grid.setAlignment(Pos.CENTER);
        login_window.layout_grid.add(username_text, 0,0);
        login_window.layout_grid.add(username, 1,0);
        login_window.layout_grid.add(password_text, 0,1);
        login_window.layout_grid.add(pass, 1,1);
        login_window.layout_grid.add(sign, 1,2);
        if(sql_login.Get_Int("SELECT ID FROM users") == 0) {
           Sign_up();
        }
        else {
            Sign_in();
        }
    }

    // Sign up action
    public void Sign_up () {
        sign.setText("Sign up");
        sign.setOnAction(e -> {
            sql_login.Registarion("INSERT INTO users (username, password) VALUES (?,?)", username.getText(),pass.getText());
        });
        Get_Acces(1);
    }

    // Sign in action
    public void Sign_in (){
        sign.setText("Sign in");
        sign.setOnAction(e -> {
            if(username.getText().equals(sql_login.Get_String("SELECT username FROM users WHERE ID = 1")) && pass.getText().equals(sql_login.Get_String("SELECT password FROM users WHERE ID = 1"))){
                Get_Acces(1);
            }
            else {
                Get_Acces(0);
            }
        });
    }

    // Acces for Logging Session
    public Integer Get_Acces(Integer acces){
        return acces;
    }
}

Klasa Window:

package classes;

import javafx.scene.Scene;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;

// The class responsible for the window and scene
public class Window extends Stage {

    // Window Parametres
    Scene scene;
    int number, MinSize1, MinSize2, Vgap, Hgap;
    String title;
    GridPane layout_grid = new GridPane();

    // Constructor
    Window (int Number_layout, int MinSize01, int MineSize02, int V, int H, String name){
        number = Number_layout;
        MinSize1 = MinSize01;
        MinSize2 = MineSize02;
        Vgap = V;
        Hgap = H;
        title = name;
    }

    // Setting window parametres
    public void Set(){
        switch (number){
            case 1:
                 scene = new Scene(layout_grid);
                 layout_grid.setMinSize(MinSize1,MinSize2);
                 layout_grid.setVgap(Vgap);
                 layout_grid.setHgap(Hgap);
                 break;
        }
    }
}

Klasa MySql:

package classes;

import java.sql.*;

// The class responsible for writing and reading from the database
public class MySql
{
    // Variables
    private Connection conn;
    private String url, userName, password_base;
    public MySql()
    {
        url = "jdbc:mysql://localhost/invoices?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Europe/Warsaw" ;
        userName = "root";
        password_base = "123";
    }

    // Connecting to the database
    public String connect()
    {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver").newInstance();
        }
        catch (InstantiationException e) {
            e.printStackTrace();
            return "error";
        }
        catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        try {
            conn = DriverManager.getConnection(url, userName, password_base);
        }
        catch (SQLException e) {
            e.printStackTrace();
            return e.toString();
        }
        return "Connected successfully";
    }

    // Disconnecting from the database
    public void disconnect()
    {
        try{
            conn.close();
        } catch (SQLException e) {
            System.err.println(e.toString());
        }
    }

    // Getting Strings from the Database
    public String Get_String(String query)
    {
        connect();
        Statement statement;
        ResultSet rs;
        String result="";

        try {
            statement = conn.createStatement();
            rs = statement.executeQuery(query);
            rs.next();
            result = rs.getString(1);
        } catch (SQLException e) {
            System.err.println(e.toString());
            return e.toString();
        }
        disconnect();
        return result;
    }

    // Getting Integers from the Database
    public Integer Get_Int(String query)
    {
        connect();
        Statement statement;
        ResultSet rs;
        int result = 0;

        try {
            statement = conn.createStatement();
            rs = statement.executeQuery(query);
            rs.next();
            result = rs.getInt(1);
        } catch (SQLException e) {
            System.err.println(e.toString());
        }
        disconnect();
        return result;
    }

    // Registration a user in the database
    public void Registarion(String query, String first, String second)
    {
        connect();
        PreparedStatement prstatement;
        try {
            prstatement = conn.prepareStatement(query);
            prstatement.setString(1, first);
            prstatement.setString(2, second);
            prstatement.executeUpdate();
        } catch (SQLException e) {
            System.err.println(e.toString());
        }
        disconnect();
    }
}

Dodam tylko, że Switch w funkcji Set() w klasie Window, będzie rozwijany wtedy, gdy będzie potrzeba stworzenia innego rodzaju okna.

2

chociażby to wygląda trochę dziwnie

    private String url, userName, password_base;
    public MySql()
    {
        url = "jdbc:mysql://localhost/invoices?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Europe/Warsaw" ;
        userName = "root";
        password_base = "123";
    }
0

Tak na szybko:

Co się stanie, gdy connect nie zadziała?
Dlaczego tak późno zareaguje przy powyższym błędzie?
Wartości domyślne nie zawsze są dobrym pomysłem.

Nie wiem ile masz tych formularzy. Jeśli będzie ich kilka z różnymi wartościami do odczytu/zapisu to może warto zastosować tutaj programowanie obiektowe?
To znaczy wyodrębnić określone części do osobnych klas.
Opakować np connect/disconenct i inne części systemu, będzie Ci łatwiej reagować na pewne zdarzenia i ewentualnie później zbierać odwołania do bazy danych, aby jej tak nie katować.

1 użytkowników online, w tym zalogowanych: 0, gości: 1