Programmation Orientée Objet Le Langage JAVA

publicité
6
EPU - Génie Biologique (BIMB)
[email protected]
Programmation
Orientée
Objet
Le Langage
JAVA
6
2/16
P.O.O. - Le langage Java
Chapitre 6
Accès aux
Bases de Données
6
3/16
●
●
Rappels ( 1 )
Base de Données :
– Permet de stocker un grand nombre d'informations
–
Données accessibles simultanément par plusieurs
utilisateurs
–
Gestion de droits d'accès
Structure d'une BD :
–
Données rangées dans des tables (table des pilotes, table
des avions)
–
Enregistrements d'une table identifés (et uniques) grâce à
une clé primaire
–
Possibilité d'avoir les liaisons qui existent entre les tables :
clés étrangères (table vols)
6
4/16
●
Rappels (2)
Exemple :
– Schéma de la base
–
Contenu de la base
6
5/16
●
●
Rappels (3)
3 types de requêtes :
–
Requêtes de défnition : défnir/modifer le schéma
–
Requêtes de modifcation : modifer les données
–
Requêtes d'interrogation : récupérer certaines données
Le langage SQL :
–
Langage de requêtes,
–
Utilisé dans de nombreux SGBD,
–
Peut-être inséré dans de nombreux langages de
programmation (PHP, Java, Langage C, … )
6
6/16
●
Rappels (4)
Requêtes de défnition
–
Création d'une table :
CREATE TABLE nomTable ( attr format, … )
–
Suppression d'une table :
DROP TABLE nomTable
–
Modifcation du schéma d'une table :
ALTER TABLE nomTable ADD attr format
ALTER TABLE nomTable MODIFY attr format
ALTER TABLE nomTable DROP attr
6
7/16
Rappels (5)
●
Requêtes de modifcation
–
Ajout d'un enregistrement :
INSERT INTO nomTable [ (attr, …) ]
VALUES ( val, … )
–
Suppression d'un enregistrement :
DELETE FROM nomTable
[ WHERE condition ]
–
Modifcation des valeurs d'un enregistrement :
UPDATE nomTable
SET attr = new_Val
[ WHERE condition ]
6
8/16
●
Rappels (6)
Requêtes d'interrogation
–
Bloc de base :
–
Tri des résultats :
–
Statistiques sur les résultats (dans le SELECT) :
SELECT attr, ...
FROM nomTable, …
[ INNER JOIN table ON Prim = Etr ]
[ WHERE condition ]
ORDER BY attr
[ DESC ], …
SUM (attr), AVG (attr), MAX (attr), MIN (attr), COUNT (attr)
–
Regroupement : GROUP BY attr, … [ HAVING stat/gr ]
–
Possibilité d'imbriquer les requêtes (dans le WHERE)
6
9/16
●
Rappels (7)
Exemples :
SELECT Nom, Prenom
FROM PILOTES
ORDER BY Nom DESC
SELECT Type
FROM AVIONS
WHERE Ville = 'Nice'
SELECT Nom
FROM PILOTES
INNER JOIN VOLS ON NumPil = Pil
WHERE NumVol = 'AF100'
SELECT COUNT DISTINCT (VilleArrivee)
FROM VOLS
SELECT Nom
FROM PILOTES
INNER JOIN VOLS ON NumPil = Pil
WHERE Adr = VilleArrivee
SELECT Ville
FROM AVIONS
GROUP BY Ville
HAVING COUNT(*) > 1
SELECT DISTINCT Type
FROM AVIONS
WHERE Cap > (
SELECT AVG(Cap)
FROM AVIONS )
SELECT NumVol
FROM VOLS
WHERE VilleArrivee IN (
SELECT DISTINCT Adr
FROM PILOTES )
6
10/16
●
●
Accès aux BD ( 1 )
La liaison se fait grâce à :
–
Une interface : Java DataBase Connectivity (JDBC)
–
Le contenu du package java.sql
4 étapes pour connecter un programme Java à une base de
données :
1. Charger le driver correspondant à la BD (SQL, SQLite, …)
2.Ouvrir la connexion avec la BD
3. Exécuter une requête
4.Traiter, éventuellement, le résultat produit par la requête
6
11/16
●
Accès aux BD (2)
Etape 1 : Chargement du driver
–
Le driver = un fchier .jar à récupérer
–
La commande pour le charger :
Class.forName ("nomDriver");
–
–
Quelques drivers :
● PostGres : "org.postgresql.Driver"
● SQL: "com.microsoft.sqlserver.jdbc.SQLServerDriver"
● SQLite: "org.sqlite.JDBC"
● …
Exception levée si driver non trouvé
6
12/16
●
Accès aux BD (3)
Etape 2 : Ouverture de la connexion
–
–
Indiquer :
● L'URL de connexion : type de la BD + infos sur la
base (nom et port du serveur, nom de la BD)
● Nom de l'utilisateur
● Mot de passe de l'utilisateur
La commande pour ouvrir la connexion retourne un objet
de type Connection
Connection connex= DriverManager.getConnection(url, nom, mdp);
–
Certaines informations peuvent être facultatives :
● Nom et port du serveur
● Nom et mot de passe de l'utilisateur
–
Exception levée si ouverture impossible
6
13/16
●
Accès aux BD (4)
Etape 3 : Exécution de la requête
–
Nécessite un objet de type Statement lié à la connexion :
Statement st = connex.createStatement() ;
–
Commande pour exécuter une requête de défnition ou une
requête de modifcation : retourne le nombre
d'enregistrements qui ont été « touchés »
int nb = st.executeUpdate ( "requêteSQL" ) ;
–
Commande pour exécuter une requête d'interrogation :
retourne un objet de type ResultSet qui contient le
résultat de la requête :
ResultSet rs = st.executeQuery ( "requêteSQL" ) ;
6
14/16
●
Accès aux BD (5)
Etape 4 : Traitement du résultat de la requête
–
–
Cas d'une requête de défnition ou de modifcation :
● Retour d'un entier (récupération facultative)
Cas d'une requête d'interrogation :
● Retour d'un ensemble de résultats (ResultSet)
● Commande next() pour parcourir l'ensemble :
– Renvoie le résultat suivant ou False
– Un résultat = un enregistrement i.e plusieurs
valeurs pouvant être de types différents et
ayant un indice
while (rs.next( )) {
System.out.println ( rs.getInt (2) ) ;
System.out.println ( rs.getString ("attr") ) ;
}
6
15/16
Accès aux BD (6)
–
Possibilité d'avoir des info sur la structure d'un ResultSet :
●
Utilisation d'un objet de type ResultSetMetaData
ResultSetMetaData rsMeta = rs.getMetaData() ;
●
Récupérer le nombre d'attributs
rsMeta.getColumnCount() ;
●
Récupérer le nom d'un attribut
rsMeta.getColumName( i ) ;
●
Récupérer le type d'un attribut
rsMeta.getColumTypeName( i ) ;
●
…
6
16/16
Exemple
Téléchargement