有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

mysql数据库中的Java存储操作

所以我在做一个登录系统。根据您登录时帐户的角色,它会显示特定于角色的按钮。例如,如果你以员工身份登录,你会看到两个按钮,分别是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中的resultSet。getURL(“链接”);告诉我一个错误:“本地变量是从内部类中访问的;需要声明为final。 在最终生成结果集之后,它又给了我一个错误: 最终结果集ResultSet=null

这一部分现在给了我一个错误: 结果集=分贝。ExecuteSultSetQuery(sqlMenu); 无法为最终VariableResultSet赋值


共 (0) 个答案