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) 个答案