Programmation

JDBC CRUD avec MySql

30 août 2024

Table des matières:

  1. Présentation du Code
  2. 1. Creation de la classe Student
  3. 2. Configuration de la Connexion à la Base de Données
  4. Étapes clés :
  5. 3. Création de la Table students
  6. 4. Opérations CRUD sur la Table students
  7. a. Insertion de Données
  8. b. Mise à Jour de Données
  9. c. Suppression de Données
  10. d. Récupération de Données
  11. 5. Classe Principale MainActivity
  12. 6. Conclusion

Dans cet article, nous allons examiner un exemple de code Java qui établit une connexion avec une base de données MySQL et effectue des opérations CRUD (Create, Read, Update, Delete) sur une table students. Ce code est structuré pour démontrer les bonnes pratiques de gestion de base de données avec Java.

Présentation du Code

Le code Java fourni se compose de deux classes principales :

  1. Student : Cette classe contient les méthodes pour se connecter à la base de données, créer une table, insérer des enregistrements, mettre à jour et supprimer des enregistrements, et récupérer les données.
  2. MainActivity : La classe principale avec la méthode main qui instancie la classe Student et appelle ses méthodes pour interagir avec la base de données.

JDBC

1. Creation de la classe Student

import java.sql.*;
 
class Student{
private Statement stmt;
 
private void setStmt(Statement statement) {
this.stmt = statement;
}
private Statement getStmt() {
return this.stmt;
}
}

2. Configuration de la Connexion à la Base de Données

La méthode connectDb() de la classe Student est responsable de l’établissement d’une connexion avec la base de données MySQL.

public void connectDb() {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
try {
Connection con = DriverManager.getConnection("jdbc:mysql://localhost/school", "root", "");
this.setStmt(con.createStatement());
System.out.println("Connexion a la base de donnees reussie");
} catch (SQLException sqle) {
System.out.println("Une erreur est survenue lors de la connexion a la base de donnees");
sqle.printStackTrace();
}
} catch (ClassNotFoundException cnf) {
System.out.println("Une erreur est survenue lors du chargement du driver");
cnf.printStackTrace();
}
}

Étapes clés :

  • Chargement du driver MySQL avec Class.forName(). Pour que le Driver fonctionne, on a besoin d’un fichier jar du mysql-connector. Vous pouvez le trouver ici: mysql-connector
  • Établissement de la connexion avec DriverManager.getConnection().
  • Gestion des exceptions pour capturer et afficher les erreurs de connexion.

3. Création de la Table students

La méthode createStudentTable() crée une table nommée students si elle n’existe pas déjà. Elle utilise une commande SQL DDL (Data Definition Language).

public void createStudentTable() throws SQLException {
String studentTableDDL = "CREATE TABLE IF NOT EXISTS students (id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100), age INT)";
this.getStmt().execute(studentTableDDL);
System.out.println("Creation de la table students reussie");
}

4. Opérations CRUD sur la Table students

a. Insertion de Données

La méthode createStudent() insère un nouvel étudiant dans la table students.

public void createStudent(String name, int age) throws SQLException {
String query = "INSERT INTO students (name, age) VALUES ('" + name + "', " + age + ")";
this.getStmt().executeUpdate(query);
System.out.println("Insertion reussie");
}

b. Mise à Jour de Données

La méthode updateStudent() met à jour l’âge d’un étudiant existant en utilisant son id.

public void updateStudent(int id, int age) throws SQLException {
String queryUpdate = "UPDATE students SET age=" + age + " WHERE id=" + id;
this.getStmt().executeUpdate(queryUpdate);
System.out.println("Mise a jour reussie");
}

c. Suppression de Données

La méthode deleteStudent() supprime un étudiant de la table en fonction de son id.

public void deleteStudent(int id) throws SQLException {
String queryUpdate = "DELETE FROM students WHERE id=" + id;
this.getStmt().executeUpdate(queryUpdate);
System.out.println("L'utilisateur avec l'id " + id + " a ete supprime");
}

d. Récupération de Données

La méthode getStudents() récupère tous les enregistrements de la table students et les affiche dans la console.

public void getStudents() throws SQLException {
String query = "SELECT * FROM students";
ResultSet rs = this.getStmt().executeQuery(query);
while (rs.next()) {
System.out.println("Name: " + rs.getString("name") + "-" + "Age: " + rs.getInt("age"));
System.out.println("\n");
}
}

Le code final ressemble a ceci:

import java.sql.*;
 
class Student{
private Statement stmt;
 
private void setStmt(Statement statement) {
this.stmt = statement;
}
private Statement getStmt() {
return this.stmt;
}
 
public void connectDb() {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
try {
Connection con = DriverManager.getConnection("jdbc:mysql://localhost/school", "root", "");
this.setStmt(con.createStatement());
System.out.println("Connexion a la base de donnees reussie");
}catch(SQLException sqle) {
System.out.println("Une erreur est survenue lors de la connexion a la base de donnees");
sqle.printStackTrace();
}
}catch(ClassNotFoundException cnf) {
System.out.println("Une erreur est survenue lors du chargement du driver");
cnf.printStackTrace();
}
}
// create students table
public void createStudentTable() throws SQLException {
String studentTableDDL = "CREATE TABLE IF NOT EXISTS students (id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100), age INT)";
this.getStmt().execute(studentTableDDL);
System.out.println("Creation de la table students reussie");
}
// create a new student
public void createStudent(String name, int age) throws SQLException {
String query = "INSERT INTO students (name, age) VALUES ('" + name + "', " + age + ")";
this.getStmt().executeUpdate(query);
System.out.println("Insertion reussie");
}
// update a new student
public void updateStudent(int id, int age) throws SQLException {
String queryUpdate = "UPDATE students SET age=" + age + " WHERE id="+id;
this.getStmt().executeUpdate(queryUpdate);
System.out.println("Mise a jour reussie");
}
// delete a student
public void deleteStudent(int id) throws SQLException {
String queryUpdate = "DELETE FROM students WHERE id="+id;
this.getStmt().executeUpdate(queryUpdate);
System.out.println("L'utilisateur avec l'id " + id + " a ete supprime");
}
// get all students and display them to the console
public void getStudents() throws SQLException {
String query = "SELECT * FROM students";
ResultSet rs = this.getStmt().executeQuery(query);
while(rs.next()) {
System.out.println("Name: " + rs.getString("name")+ "-" +
"Age: " + rs.getInt("age"));
System.out.println("\n");
}
}
}

5. Classe Principale MainActivity

La classe MainActivity contient la méthode main, qui est le point d’entrée du programme. Elle instancie un objet Student et appelle ses méthodes pour manipuler les données dans la base de données.

public class MainActivity {
public static void main(String[] args) {
Student student = new Student();
student.connectDb();
try {
student.createStudentTable();
student.createStudent("Alkaly", 65);
student.createStudent("Moussa", 65);
student.createStudent("Keba", 65);
student.updateStudent(3, 80);
student.deleteStudent(3);
student.getStudents();
} catch (SQLException sqle) {
sqle.printStackTrace();
}
}
}

6. Conclusion

Ce code est un bon exemple de gestion des connexions à une base de données et d’opérations CRUD en Java. Cependant, il présente quelques limitations :

  • Risques d’injection SQL : Les requêtes SQL sont construites à l’aide de concaténation de chaînes, ce qui peut être vulnérable aux attaques par injection SQL. L’utilisation de PreparedStatement serait plus sécurisée.
  • Manque de gestion avancée des erreurs : Bien que des exceptions soient capturées, une gestion plus sophistiquée des erreurs, telle que la journalisation, pourrait être bénéfique pour un projet de production.

Pour améliorer ce code, il serait conseillé d’utiliser des objets PreparedStatement pour éviter les injections SQL et d’intégrer une bibliothèque de gestion des logs pour une meilleure gestion des erreurs.

Ce que nous verrons plustard. Merciiiiiiii

Partager cet article:

Moussa Alkaly Badji

Coach à Bakeli School of Technology

Bakeli est une école de formation professionnelle dans les nouvelles technologies créer par Volkeno. Elle a formé + de 6000 étudiants et professionnels aux métiers des nouvelles technologies et du digital.

Bakeli

Contacts

S'abonner à la Newsletter

Chargement en cours...

© Copyright 2024, Tous droits réservés.