私はJavaとmysqlを完全に新しくしています。私は何かと苦労しています。 私が取り組んでいるプロジェクトでは、マネージャと従業員がログインできるログインシステムを作りたいと思っています。mysqlワークベンチを使用したJavaFXログインシステム
mysqlワークベンチテーブルには、ログインに必要ないくつかのカラムがあります。列には、ユーザー名、パスワード、および機能があります。
これまで私は、管理者または従業員が自分のユーザー名とパスワードを入力してログインできるログインシステムを作成しました。これは正常に動作します。
しかし、私のコードで関数が0か1かをチェックするようにしたいと思います。関数が0の場合、従業員としてログインし、関数が1マネージャーとしてログインします。マネージャーと従業員のログインの違いは、マネージャーがManagerHomeMenuというシーンにログインし、従業員がEmployeeHomeMenuにログインするようにすることです。
しかし、私が上で述べたように、私は全く新しいので、これをするために何をすべきかわからない。
すべてのヘルプは大歓迎です!
CODE:
データベース接続:
package databasetesten.connection;
import java.sql.*;
import javax.swing.*;
/**
*
* @author Matt Holland
*/
public class ConnectionUtil {
Connection conn = null;
public static Connection connectdb() {
try {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://mhhproject.nl:3306/Management", "root", "root");
return conn;
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
return null;
}
}
}
ログインapplicatie:
package databasetesten;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
/**
*
* @author Matt Holland
*/
public class LoginApplication extends Application {
@Override
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
FXMLDocument.fxml:
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<AnchorPane id="AnchorPane" prefHeight="437.0" prefWidth="548.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8.0.40" fx:controller="databasetesten.FXMLDocumentController">
<children>
<Button fx:id="button" layoutX="204.0" layoutY="162.0" onAction="#handleButtonAction" text="Login" />
<Label fx:id="label" layoutX="204.0" layoutY="269.0" prefHeight="17.0" prefWidth="149.0" />
<TextField fx:id="textEmail" layoutX="200.0" layoutY="65.0" />
<Label layoutX="107.0" layoutY="69.0" text="Username" />
<Label layoutX="107.0" layoutY="119.0" text="Password" />
<PasswordField fx:id="textPassword" layoutX="200.0" layoutY="115.0" />
</children>
</AnchorPane>
FXMLMenuEmployee:
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<AnchorPane id="AnchorPane" prefHeight="400.0" prefWidth="600.0" `xmlns:fx="http://javafx.com/fxml/1">`
</AnchorPane>
FXMLMenuManager:
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<AnchorPane id="AnchorPane" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml/1">
</AnchorPane>
FXMLDocumentController:
package databasetesten;
import databasetesten.connection.ConnectionUtil;
import java.net.URL;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;
import javafx.stage.Stage;
/**
*
* @author Matt Holland
*/
public class FXMLDocumentController implements Initializable {
@FXML
private TextField textEmail;
@FXML
private PasswordField textPassword;
Stage dialogStage = new Stage();
Scene scene;
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
public FXMLDocumentController() {
connection = ConnectionUtil.connectdb();
}
@FXML
private void handleButtonAction(ActionEvent event) {
String email = textEmail.getText().toString();
String password = textPassword.getText().toString();
String sql = "SELECT * FROM Employee WHERE username = ? and password = ?";
try {
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, email);
preparedStatement.setString(2, password);
resultSet = preparedStatement.executeQuery();
if (!resultSet.next()) {
infoBox("Enter Correct Email and Password", "Failed", null);
} else {
infoBox("Login Successfull", "Success", null);
Node source = (Node) event.getSource();
dialogStage = (Stage) source.getScene().getWindow();
dialogStage.close();
scene = new Scene(FXMLLoader.load(getClass().getResource("FXMLMenuEmployee.fxml")));
dialogStage.setScene(scene);
dialogStage.show();
}
} 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();
}
@Override
public void initialize(URL url, ResourceBundle rb) {
}
}
このデータベース・テーブルには、次のようになります。
The database table called employee looks like this:
username password function
Bob1 Welcome123 0
Ben1 Bensw123 1
'文字列のSQL = "ユーザ名=とパスワード=従業員FROM SELECT機能?"。 ... Scene = new Scene(FXMLMenuManager.fxml ");););'シーンの新しいシーン(FXMLLoader.load(getClass()。getResource(resultSet.getInt(1)== 0? "FXMLMenuEmployee.fxml"また、ステートメントを正しく閉じるようにしてください。さらに、結果セット/ステートメントの変数の代わりにフィールドを使用することには意味がありません。 – fabian
こんにちはファビアン!私はあなたのコードを試して、それはほとんど動作します。問題は今私が従業員としてログインするたびにマネージャーとしてマネージャーとして私をログインさせることです。何が間違っているのか分かりません。 – Snidjers
UIとデータベースへのアクセスを混在させるほど、あなたの質問は広すぎます。それを分離することで事態がより簡単になり、おそらくあなたの質問はより重要になります。 –