mysql数据库中的java存储操作

rta7y2nd  于 2021-06-21  发布在  Mysql
关注(0)|答案(0)|浏览(284)

所以我在做一个登录系统。根据您登录时帐户的角色,它将显示特定于角色的按钮。例如,如果您以雇员身份登录,您将看到两个按钮,称为requeststatus和registermissing。如果您以管理员身份登录,您将看到按钮requeststatus、registermissing、reports和userroles。经过一点摸索和错误(因为我是java的初学者),我设法使它工作!
代码:

@FXML
private TextField textUsername;

@FXML
private PasswordField textPassword;

Stage dialogStage = new Stage();
Scene scene;

ResultSet resultSet = null;

//Login for employee
@FXML
private void handleButtonAction(ActionEvent event) {
    Database db = new Database();
    String username = textUsername.getText();
    String password = textPassword.getText();
    int usrID = 0;
    int roleID = 0;
    //String RoleID = EmpSelect.getValue();
    String sql = String.format("SELECT * FROM Employee "
            + "WHERE username = '%s' "
            + "and password = '%s' ",
            //+ "and RoleID = '%s' ", 
            username, password);

    infoBox("sql [" + sql + "]", "Success", null); 

    try {
        resultSet = db.executeResultSetQuery(sql);

        if (!resultSet.next()) {
            infoBox("Enter Correct Username and Password", "Failed", null);
        } else {
                //infoBox("Login Successfull", "Success", null);
            resultSet.first();
            usrID = resultSet.getInt("idEmployee");
            roleID = resultSet.getInt("RoleID");

            utilities.setEmployee(usrID, roleID);

            FXMLDocumentController controller = new FXMLDocumentController();
            utilities.newAnchorpane("EmployeeHomescreen", paneLogin);
            infoBox("Login Successfull", "Success", null);                  
        }

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

public static void infoBox(String infoMessage, String titleBar, String headerMessage) {
    Alert alert = new Alert(AlertType.INFORMATION);
    alert.setTitle(titleBar);
    alert.setHeaderText(headerMessage);
    alert.setContentText(infoMessage);
    alert.showAndWait();
}

所以基本上我在这里做的是,公司的一个员工可以登录,它显示查询的结果,这样我就知道它工作了。

import static com.mycompany.mavenproject2.LoginController.infoBox;
import java.net.URL;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Pane;
import javafx.scene.layout.VBox;

/**
 *
 * @author John
 */
public class WorkerHomescreenController implements Initializable {

@FXML
private AnchorPane actualmain;

@FXML
private Pane mainpage;

@FXML
private Label label1;

@FXML
private Button but1, but2, but3, but4;

@FXML
private VBox VBPane;

@Override
public void initialize(URL url, ResourceBundle rb) {

    //infoBox("User ID = " + utilities.userID, "Success", null);
       Database db = new Database();
    ResultSet resultSet = null;
    String sqlMenu = String.format("SELECT * FROM Menu "
            + "WHERE idMenu IN (SELECT MenuID FROM MenuRoles WHERE RoleID = " + utilities.roleID + ") ");
            //+ "AND Active = True");
    try {
        resultSet = db.executeResultSetQuery(sqlMenu);
        int i=0;
        GridPane gpnael = new GridPane();
        while (resultSet.next()) {
            Button button = new Button(resultSet.getString("Link"));
            gpnael.add (button, i++, 1 );
            button.setStyle("-fx-font: 22 arial; -fx-base: #d81e05; "
                    + "-fx-background-radius: 0; -fx-border-width: 1 0 0 0; "
                    + "-fx-border-color: white; -fx-font-weight: bold; "
                    + "-fx-font-size: 18;");

            button.setOnAction(new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent e) {
                    try {
                        resultSet.getURL("Link");
                    } catch (SQLException ex) {
                        Logger.getLogger(WorkerHomescreenController.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            });
        }

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

}
Utilities utilities = new Utilities();

//Methods to open other pages
@FXML
private void openRequestStatus(ActionEvent event) {
    utilities.newPane("RequestStatus", but1, mainpage, label1);
}

@FXML
private void openRegisterMissing(ActionEvent event) {
    utilities.newPane("RegisterMissing", but2, mainpage, label1);
}

@FXML
private void openRequestTest(ActionEvent event) {
    utilities.newPane("RequestStatus", but3, mainpage, label1);
}

@FXML
private void openRegistertesting(ActionEvent event) {
    utilities.newPane("RegisterMissing", but4, mainpage, label1);
}
}

这是登录后重定向到的页面的控制器。此页面当前的设置方式是,根据您用于登录的帐户的roleid,它将生成包含我存储在数据库中的信息的按钮。
公用设施控制器:

public static int userID;
   public static int roleID;

   @FXML
   public void setEmployee(int idEmployee, int RoleID) {
    this.userID = idEmployee;
    this.roleID = RoleID;
}

实用程序控制器用于设置当前员工。
我的问题是:我的程序目前可以根据你的帐户生成按钮(这很好!)。我现在想做的是,按钮有一个链接保存在数据库中以及。因此,当按钮生成时,它有一个标签和一个链接附着在它上面,这样当您按下按钮时,它将转到附着在按钮上的链接。
我希望这有道理。
我知道在一个.fxml文件中,如果你在里面做一个按钮,你可以给它一个onaction事件,这样如果你按下按钮,它就会带你到正确的页面。
我的数据库是这样的:

EMPLOYEE Table
idEmployee    firstname   lastname   username   password     RoleID
1             John        Doe        John123    Test123      1
2             Tim         Gardener   Tim123     Welcome123   2

ROLES Table
idRole     roleName
1          Employee
2          Manager

MENU Table
idMenu    Name    Link     
1         but1    RequestStatus
2         but2    RegisterMissing
3         but3    Reports
4         but4    UserRoles

MenuRoles Table
MenuID      RoleID
1           1
1           2
2           1
2           2
3           2
4           2

我希望你们能帮我解决这个问题,谢谢你们抽出时间我很感激!
编辑1:在阅读了评论之后,我编辑了一些代码。我现在遇到的问题是resultset.geturl(“link”)中的resultset;给我一个错误:“本地variabel是从内部类访问的;需要宣布为最终决定。在使resultset为final之后,它给了我另一个错误:final resultset resultset=null;
这部分现在给出了一个错误:resultset=db.executeSultSetQuery(sqlmenu);无法为最终VariableResultSet赋值。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题