JavaFx et Connection a une base de données Mysql avec Jdbc

Dans cet article nous allons voir comment faire le lien avec les champs d’une interface graphique est une base de données.
1. Création d’une base de données
Apres avoir créé une base nous créons une table que l’on va nommer employé :


CREATE TABLE employe(
id int (30) NOT NULL,
nom varchar (30) NOT NULL,
prenom varchar (30) NOT NULL,
email varchar (30) NOT NULL,
tel varchar (30) NOT NULL,
PRIMARY KEY (id)
);

2.Création de l’entité qui va acceuillir les donnée en provenance de la base.


public class Employe {
private int id;
private String nom;
private String prenom;
private String email;
private String tel;
//Constructeurs Getters et Setters.

  1. Création du Bean qui va binder les champ de l’IHM et de la base

import com.sun.rowset.JdbcRowSetImpl;

import javax.sql.rowset.JdbcRowSet;
import java.sql.SQLException;

public class EmployeBean {
//jar du connector mysql a connecter sur le site de mysql et à importer le package dans le classpath
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
//Url de notre base
static final String DB_URL = "jdbc:mysql://localhost:3306/employe";
//Username pour acceder à la base
static final String DB_USER = "root";
//mot de passe
static final String DB_PASSWORD = "masterkey";
//objet d'accés à la base
private JdbcRowSet jdbcRowSet = null;

//Constructeur
public EmployeBean() {
try {
//Charger le driver
Class.forName(JDBC_DRIVER);
jdbcRowSet = new JdbcRowSetImpl();
jdbcRowSet.setUrl(DB_URL);
jdbcRowSet.setUsername(DB_USER);
jdbcRowSet.setPassword(DB_PASSWORD);
//Charger toutes les données de la base
jdbcRowSet.setCommand("SELECT * FROM employe");
jdbcRowSet.execute();
} catch (SQLException | ClassNotFoundException e) {
e.printStackTrace();
}
}

//Fonction de creation d'un nouvel employé
public Employe create(Employe employe) {
try {
//deplacement a la ligne d'insertion
jdbcRowSet.moveToInsertRow();
jdbcRowSet.updateInt("id", employe.getId());
jdbcRowSet.updateString("nom", employe.getNom());
jdbcRowSet.updateString("prenom", employe.getPrenom());
jdbcRowSet.updateString("email", employe.getEmail());
jdbcRowSet.updateString("tel", employe.getTel());
//inserer l'enregistrement
jdbcRowSet.insertRow();
//se deplacer sur l'enregistrement inserer
jdbcRowSet.moveToCurrentRow();
} catch (SQLException e) {
try {
jdbcRowSet.rollback();
employe = null;
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
}
return employe;
}

//Mise à jours d'un enregistrement
public Employe update(Employe employe) {
try {
jdbcRowSet.updateString("nom", employe.getNom());
jdbcRowSet.updateString("prenom", employe.getPrenom());
jdbcRowSet.updateString("email", employe.getEmail());
jdbcRowSet.updateString("tel", employe.getTel());
jdbcRowSet.updateRow();
jdbcRowSet.moveToCurrentRow();
} catch (SQLException e) {
try {
jdbcRowSet.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
}
return employe;
}

//supression d'un enregistrement
public void delete() {
try {
jdbcRowSet.moveToCurrentRow();
jdbcRowSet.deleteRow();
} catch (SQLException e) {
try {
jdbcRowSet.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
}
}

//deplacement sur le premier enregistrement
public Employe moveFirst() {
Employe employe = new Employe();
try {
jdbcRowSet.first();
employe.setId(jdbcRowSet.getInt("id"));
employe.setNom(jdbcRowSet.getString("nom"));
employe.setPrenom(jdbcRowSet.getString("prenom"));
employe.setEmail(jdbcRowSet.getString("email"));
employe.setTel(jdbcRowSet.getString("tel"));
} catch (SQLException e) {
e.printStackTrace();
}
return employe;
}

//deplacement sur le dernier enregistrement
public Employe moveLast() {
Employe employe = new Employe();
try {
jdbcRowSet.last();
employe.setId(jdbcRowSet.getInt("id"));
employe.setNom(jdbcRowSet.getString("nom"));
employe.setPrenom(jdbcRowSet.getString("prenom"));
employe.setEmail(jdbcRowSet.getString("email"));
employe.setTel(jdbcRowSet.getString("tel"));
} catch (SQLException e) {
e.printStackTrace();
}
return employe;
}

//deplacement sur l'enregistrement suivant
public Employe moveNext() {
Employe employe = new Employe();
try {
if (jdbcRowSet.next() == false) jdbcRowSet.previous();
employe.setId(jdbcRowSet.getInt("id"));
employe.setNom(jdbcRowSet.getString("nom"));
employe.setPrenom(jdbcRowSet.getString("prenom"));
employe.setEmail(jdbcRowSet.getString("email"));
employe.setTel(jdbcRowSet.getString("tel"));
} catch (SQLException e) {
e.printStackTrace();
}
return employe;
}

//deplacement sur l'enregistrement precedent
public Employe movePrevious() {
Employe employe = new Employe();
try {
if (jdbcRowSet.previous() == false) jdbcRowSet.next();
employe.setId(jdbcRowSet.getInt("id"));
employe.setNom(jdbcRowSet.getString("nom"));
employe.setPrenom(jdbcRowSet.getString("prenom"));
employe.setEmail(jdbcRowSet.getString("email"));
employe.setTel(jdbcRowSet.getString("tel"));
} catch (SQLException e) {
e.printStackTrace();
}
return employe;
}

//charger les informations de l'enregistrement courant
public Employe getCurrent(){
Employe employe = new Employe();
try {
jdbcRowSet.moveToCurrentRow();
employe.setId(jdbcRowSet.getInt("id"));
employe.setNom(jdbcRowSet.getString("nom"));
employe.setPrenom(jdbcRowSet.getString("prenom"));
employe.setEmail(jdbcRowSet.getString("email"));
employe.setTel(jdbcRowSet.getString("tel"));
} catch (SQLException e) {
e.printStackTrace();
}
return employe;
}
}

4. L’interface graphique:


import akl.employe.model.Employe;
import akl.employe.model.EmployeBean;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;

import java.util.Random;
//notre class Ui etend un BorderPane (TOP,CENTER,LEFT,RIGTH,BOTTON)
public class EmployeUI extends BorderPane {
//les elements de l'interface graphique
private Label msgLabel = new Label();
private TextField idTextField = new TextField();
private TextField nomTextField = new TextField();
private TextField prenomTextField = new TextField();
private TextField emailTextField = new TextField();
private TextField telTextField = new TextField();

//les controles
private Button createButton = new Button("New");
private Button updateButton = new Button("Update");
private Button deleteButton = new Button("Delete");
private Button firstButton = new Button("<>");

//chargement du bean pour se connecter à la base
private EmployeBean employeBean = new EmployeBean();

//Constructeur
public EmployeUI() {
//Padding
setPadding(new Insets(10, 10, 10, 10));
//placement du Label sur la partie Top du BorderPane
setTop(msgLabel);
//placement des TextFileds sur la partie Center
setCenter(initFields());
//placement des Buttons sur la partie BOTTOM
setBottom(initButtons());
//Chargement des information du premier enregistrement
setFieldData(employeBean.moveFirst());
}

//les Buttons sont placé dans un HBox (HorizontalBox)
//avec attribution d'un ActionEvent pour la gestion des evenement
private Pane initButtons() {
HBox box = new HBox();
box.setAlignment(Pos.CENTER);
box.setSpacing(5);
box.getChildren().add(createButton);
createButton.setOnAction(new ButtonHandler());
box.getChildren().add(updateButton);
updateButton.setOnAction(new ButtonHandler());
box.getChildren().add(deleteButton);
deleteButton.setOnAction(new ButtonHandler());
box.getChildren().add(firstButton);
firstButton.setOnAction(new ButtonHandler());
box.getChildren().add(prevButton);
prevButton.setOnAction(new ButtonHandler());
box.getChildren().add(nextButton);
nextButton.setOnAction(new ButtonHandler());
box.getChildren().add(lastButton);
lastButton.setOnAction(new ButtonHandler());
return box;
}

//les TextField sont placé sur une Grille 2*2
private Pane initFields() {
GridPane grid = new GridPane();
grid.setAlignment(Pos.CENTER_LEFT);
grid.setPadding(new Insets(10, 10, 10, 10));
grid.setHgap(20);
grid.setVgap(2);
grid.add(new Label("ID"), 1, 0);
idTextField.setEditable(false);
grid.add(idTextField, 2, 0);
grid.add(new Label("Nom"), 1, 1);
grid.add(nomTextField, 2, 1);
grid.add(new Label("Prenom"), 1, 2);
grid.add(prenomTextField, 2, 2);
grid.add(new Label("Email"), 1, 3);
grid.add(emailTextField, 2, 3);
grid.add(new Label("Tel"), 1, 4);
grid.add(telTextField, 2, 4);
return grid;
}

//Chargement des informations des TextFields dans l'objet Employe
private Employe getFieldData() {
Employe employe = new Employe();
employe.setId(Integer.parseInt(idTextField.getText()));
employe.setNom(nomTextField.getText());
employe.setPrenom(prenomTextField.getText());
employe.setEmail(emailTextField.getText());
employe.setTel(telTextField.getText());
return employe;
}

//chargement de l'objet Employe dans les TextFiels
private void setFieldData(Employe employe) {
idTextField.setText(String.valueOf(employe.getId()));
nomTextField.setText(employe.getNom());
prenomTextField.setText(employe.getPrenom());
emailTextField.setText(employe.getEmail());
telTextField.setText(employe.getTel());
}

//Test si un des fields est vide
private boolean isEmptyFieldsData() {
if (idTextField.getText().equals("") || nomTextField.getText().equals("") || prenomTextField.getText().equals("") || emailTextField.getText().equals("") || telTextField.getText().equals(""))
return true;
else return false;
}

//Gestion des evenement etends la class EventHandler et redefinie la methode handler
private class ButtonHandler implements EventHandler {
@Override
public void handle(ActionEvent event) {
Employe employe = getFieldData();
if (event.getSource().equals(createButton) && createButton.getText().equals("Save")) {
if (isEmptyFieldsData()) {
msgLabel.setText("Cannot create an empty record");
return;
}
if (employeBean.create(employe) != null)
msgLabel.setText("New Employe created successfully");
createButton.setText("New");
} else if (event.getSource().equals(createButton) && createButton.getText().equals("New")) {
employe.setId(new Random().nextInt(Integer.MAX_VALUE) + 1);
employe.setNom("");
employe.setPrenom("");
employe.setEmail("");
employe.setTel("");
setFieldData(employe);
createButton.setText("Save");
} else if (event.getSource().equals(updateButton)) {
if (isEmptyFieldsData()) {
msgLabel.setText("Cannot update an empty record");
return;
}
if (employeBean.update(employe) != null)
msgLabel.setText("Employe with ID:" + String.valueOf(employe.getId()) + " is updated successfully");
} else if (event.getSource().equals(deleteButton)) {
if (isEmptyFieldsData()) {
msgLabel.setText("Cannot delete an empty record");
return;
}
employe = employeBean.getCurrent();
employeBean.delete();
msgLabel.setText("Employe with ID:" + String.valueOf(employe.getId()) + " is deleted successfully");
} else if (event.getSource().equals(firstButton)) {
setFieldData(employeBean.moveFirst());
} else if (event.getSource().equals(prevButton)) {
setFieldData(employeBean.movePrevious());
} else if (event.getSource().equals(nextButton)) {
setFieldData(employeBean.moveNext());
} else if (event.getSource().equals(lastButton)) {
setFieldData(employeBean.moveLast());
}
}
}
}

 001-JavafxJdbc

Laisser un commentaire