TP2 - JDBC
Table des matières
1. Présentation 2. Installation
1. Téléchargement 2. Installation via Maven
3. Connection à la base de données Java
4. Opérations CRUD 2. Read (Select) 3. Update 4. Delete 5. TP
Présentation
// TODO
Installation
Deux choix possibles :
1. Manuellement : Télécharger la librairie et l'inclure dans le projet de développement.
2. Automatiquement : grâce au gestionnaire de projet Maven
Téléchargement
Version 42.2.17 pour Java 8 disponible sur la page https://jdbc.postgresql.org/
Lien direct : https://jdbc.postgresql.org/download/postgresql-42.2.17.jar Ajouter la librairie dans le classpath :
Dans le projet java sous IntelliJ 1. Créer un répertoire lib
2. Copier le fichier jar postgresql-42.2.17.jar
3. Sélectionner le projet Java, clic droit Open Module Settings (F4) 4. Dans la section Project Settings, sélectionner Librairies
5. Cliquer sur + et ajouter une librairie java 6. Ajouter la librairie postgresql-42.2.17.jar
7. Cliquer sur OK
Installation via Maven
Ajouter la dépendance suivante dans le fichier pom.xml :
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.17</version>
</dependency>
La librairie est ajoutée automatiquement au classpath du projet
Connection à la base de données Java
La connection de la base de données en JDBC se fait de la manière suivante :
jdbc:postgresql:database jdbc:postgresql:/
jdbc:postgresql://host/database jdbc:postgresql://host/
jdbc:postgresql://host:port/database jdbc:postgresql://host:port/
Où :
host
Nom du serveur port
Numéro de port d'écoute du seveur. Par défaut : 5432 database
Le nom de la base de données. Par défaut : le nom du user
Pour se connecter, il faut obtenir un objet JDBC de type java.sql.Connnection. Pour se faire, utiliser la méthode DriverManager.getConnection() :
sql.PostgresConnection db = DriverManager.getConnection(url, username, password);
Exemples de connexion :
1. Avec des propriétés séparées
String url = "jdbc:postgresql://localhost/basechristophe";
Properties props = new Properties();
props.setProperty("user","christophe");
props.setProperty("password","xxxxx");
sql.PostgresConnection conn = DriverManager.getConnection(url, props);
conn.close();
2. Propriétes dans l'URL
String url = "jdbc:postgresql://localhost/basechristophe?
user=christophe&password=xxxxx";
sql.PostgresConnection conn = DriverManager.getConnection(url);
conn.close();
Pour la liste complète des propriétés de connection, consulter la page https://jdbc.postgresql.org/documentation/head/connect.html
3. Passage de paramètres
String url = "jdbc:postgresql://" + serveur + "/" + baseName;
try {
connection = DriverManager.getConnection(url, user, password );
} catch (SQLException throwables) { throwables.printStackTrace();
}
// TODO select, insert, update, delete
Opérations CRUD
CRUD est un acromyme employé en programmation BdD qui veut dire Create Read Update Delete.
Pour réaliser des opérations en JDBC, il faut deux éléments :
Une connection de type java.sql.Connection comme vu précédemment,
Un objet permettant d'exécuter des requêtes, il s'obtient de deux manières différentes : à l'aide d'un objet de type java.sql.Statement :
Statement statement = null;
try{
statement = connection.createStatement();
} catch (SQLException throwables) { throwables.printStackTrace();
}
à l'aide d'un objet de type java.sql.PreparedStatement :
PreparedStatement statement;
try{
statement = connection.prepareStatement(sqlReq);
} catch (SQLException throwables) { throwables.printStackTrace();
}
PrepareStatement. Voici des exemples pour chaque cas du CRUD.
Create (Insert)
Insertion d'une ligne dans la table ENTREPRISE : (idEntreprise = 5, nomEntreprise = "NASA") avec Statement :
Statement statement = null;
try {
statement = connection.createStatement();
String sqlReq = "insert into entreprise(identreprise, nomentreprise) values (5, 'NASA')";
int res = statement.executeUpdate(sqlReq);
if (res > 0) {
System.out.println("ligne insérée");
}
} catch(SQLException e) {
System.err.println("Erreur SQL : " + e.getLocalizedMessage());
}
avec PrepareStatement :
PreparedStatement statement;
String sqlReq = "insert into entreprise(identreprise, nomentreprise) values (?, ?)";
try {
statement = connection.prepareStatement(sqlReq);
statement.setInt(1, 5);
statement.setString(2, "NASA");
int res = statement.executeUpdate();
if (res > 0) {
System.out.println("ligne insérée");
}
} catch(SQLException e) {
System.err.println("Erreur SQL : " + e.getLocalizedMessage());
}
Read (Select)
avec Statement :
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM entreprise");
while (resultSet.next()) {
int identreprise = resultSet.getInt("identreprise");
String nomEntreprise = resultSet.getString("nomentreprise");
System.out.println(identreprise + " | " + nomEntreprise);
}
avec PrepareStatement
PreparedStatement statement;
String sqlReq = "SELECT * FROM entreprise WHERE idEntreprise = ?)";
Statement statement = connection.createStatement();
statement.setInt(1, 2);
ResultSet resultSet = statement.executeQuery();
while (resultSet.next()) {
int identreprise = resultSet.getInt("identreprise");
String nomEntreprise = resultSet.getString("nomentreprise");
System.out.println(identreprise + " | " + nomEntreprise);
}
Update
avec Statement
Statement statement = null;
try {
statement = connection.createStatement();
String sqlReq = "update entreprise set nomentreprise='NASA' where identreprise=5";
int res = statement.executeUpdate(sqlReq);
if (res > 0) {
System.out.println("ligne modifiée");
}
} catch(SQLException e) {
System.err.println("Erreur SQL : " + e.getLocalizedMessage());
}
PreparedStatement statement = null;
String sqlReq = "update entreprise set nomentreprise=? where identreprise=?";
try {
statement = connection.prepareStatement(sqlReq);
statement.setString(1, "NASE");
statement.setInt(2, 5);
int res = statement.executeUpdate();
if (res > 0) {
System.out.println("ligne modifiée");
}
} catch(SQLException e) {
System.err.println("Erreur SQL : " + e.getLocalizedMessage());
}
Delete
avec Statement
Statement statement = null;
try {
statement = connection.createStatement();
String sqlReq = "delete from entreprise where identreprise=5";
int res = statement.executeUpdate(sqlReq);
if (res > 0) {
System.out.println("ligne supprimée");
}
} catch(SQLException e) {
System.err.println("Erreur SQL : " + e.getLocalizedMessage());
}
avec PrepareStatement
PreparedStatement statement = null;
String sqlReq = "delete from entreprise where identreprise=?";
try {
statement = connection.prepareStatement(sqlReq);
statement.setInt(1, 5);
int res = statement.executeUpdate();
if (res > 0) {
System.out.println("ligne supprimée");
}
} catch(SQLException e) {
System.err.println("Erreur SQL : " + e.getLocalizedMessage());
}
Listing :
solutions.tp2.SimpleConnectionTest.java sql.PostgresConnection.java
solutions.tp2.SimpleJdbcTest
TP
Pré-requis :
TP1 : installation et configuration IntelliJ, création et manipulation de la base de donnée utilisateur Tâches à réaliser :
1. Créer un projet Java sous IntelliJ
2. Ajouter la librairie correspondant au driver JDBC PostgreSQL dans le classpath 3. Créer une classe de test qui créée une connection à la base de données
4. Déplacer le code de connection dans une classe sql.PostgresConnection qui crééra une connection de type java.sql.Connection à partir du nom de serveur, nom de la base, user et le password
5. Coder le CRUD d'Etudiant :
1. Lister (afficher) toutes les étudiants 2. Créer un nouvel étudiant
3. Modifier un étudiant
4. Supprimer un étudiant (celui créé en 7 par exemple) 6. Coder les requêtes du TP1 :
1. Afficher le Professeur responsable du stage de l’étudiant ‘etudiant1’
2. Nombre de professeur ayant participé à au moins un jury.
3. Liste des étudiant(s) ayant eu la même note que l’étudiant ‘toto'