JDBC CRUD avec MySql
30 août 2024
Table des matières:
- Présentation du Code
- 1. Creation de la classe Student
- 2. Configuration de la Connexion à la Base de Données
- Étapes clés :
- 3. Création de la Table students
- 4. Opérations CRUD sur la Table students
- a. Insertion de Données
- b. Mise à Jour de Données
- c. Suppression de Données
- d. Récupération de Données
- 5. Classe Principale MainActivity
- 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 :
-
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. -
MainActivity
: La classe principale avec la méthodemain
qui instancie la classeStudent
et appelle ses méthodes pour interagir avec la base de données.
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.
Partager cet article:
Coach à Bakeli School of Technology