Structures Collectives en Java

publicité
Programmation Java
Cours n° 11
Java et bases de données
Alain Giorgetti et Françoise Sailhan
Laboratoire d'Informatique
de l’Université de Franche-Comté
Motivations
• Conservation des données d'un programme Java
 sur disque
 avec un langage d'interrogation adapté
• Accès à des bases de données existantes
 transformation des données en objets
 pour des traitements complexes
♦ sinon utiliser les langages de SGBD
• Cas d'une base de données relationnelle
 cas le plus fréquent dans la pratique
 langage de requête SQL normalisé (à 99%)
 problème : correspondance classe/relation et
objet/enregistrement non naturelle
♦ émergence de base de données objet (OODB pour
Object Oriented DataBases)
Cours n°11 : Java et bases de données - © A. Giorgetti & F. Sailhan, Université de Franche-Comté
2
Contexte Java
• JDBC
 Java DataBase Connectivity
 Standard de connexion java
♦ Connexions aux autres sources de données
♦ Méthodes Java de lecture-écriture dans la base
• OODB
 Object Oriented DataBase
 Pas de standard existant, mais quelques concepts
communs
 Différents langages objets supportés (C++, Java)
Cours n°11 : Java et bases de données - © A. Giorgetti & F. Sailhan, Université de Franche-Comté
3
JDBC
• Java DataBase Connectivity
 Connexion aux bases de données relationnelles
 Lectures-écritures dans la base en Java
• Bibliothèque de classes
 Pilotes
 Requêtes SQL
 Résultats de requêtes
• Packages de l’API JDBC (Java 2)
java.sql, javax.sql
Cours n°11 : Java et bases de données - © A. Giorgetti & F. Sailhan, Université de Franche-Comté
4
SQL
• Structured Query Language
 Langage structuré d’interrogation des bases de
données relationnelles
 Indépendant des SGBD propriétaires
♦ en réalité, quelques incompatibilités mineures
• Requête
 demande de lecture ou d’écriture dans une BD
Cours n°11 : Java et bases de données - © A. Giorgetti & F. Sailhan, Université de Franche-Comté
5
SQL – Quelques exemples
• Création d'une table (commune)
CREATE TABLE commune(nom char(20),
departement char(20))
• Suppression d'une table (commune)
DROP TABLE commune
• Requête
 Obtenir la liste des noms et départements de
rattachement de chaque commune
SELECT nom, departement
FROM commune
Cours n°11 : Java et bases de données - © A. Giorgetti & F. Sailhan, Université de Franche-Comté
6
Version de l’API JDBC
• A partir de J2SE 1.4 (Java 2 standard Edition)
 donne accès à toute source de données
♦ bases de données relationnelles, feuilles de calcul,
fichiers non structurés
 Accès effectué à travers
♦ un pont JDBC-ODBC grâce au pilote ODBC (Open
DataBase Connectivity) qui offre un mode standard de
connexion Microsoft
♦ ou un pont entre JDBC et l'interface spécifique de la
base de données du vendeur (pilote spécifique)
//Technologie JDBC
import java.sql.*;
import javax.sql.*;
...
public class ...
Pilote
ODBC
Pilote
spécifique
Source de
données
Cours n°11 : Java et bases de données - © A. Giorgetti & F. Sailhan, Université de Franche-Comté
7
Configuration préliminaire d’ODBC sous
Windows
• ODBC (Open DataBase Connectivity)
 Standard de connexion
• Préparation sous Microsoft Windows®
 Créer une BD relationnelle interrogeable en SQL
 Déclarer une source de données ODBC
♦ s'identifier en tant qu'administrateur
♦ démarrer/Panneau de configuration/Outils
d'administration/Sources de données (ODBC)
♦ Onglet « sources de données utilisateur »
♦ choisir le pilote ODBC (par exemple Microsoft Access
driver)
♦ ajouter un nom de source de données utilisateur
♦ sélectionner le fichier de la base de données
Cours n°11 : Java et bases de données - © A. Giorgetti & F. Sailhan, Université de Franche-Comté
8
Démarche à suivre avec la technologie
JDBC (I)
• Deux cas
 (Cas 1) Avec un pilote standard ODBC
♦ Effectuer une configuration préliminaire de ODBC
♦ le pilote ODBC est inclus dans java 2
♦ c'est une classe du package sun.jdbc.odbc que
l'interpréteur Java doit charger dynamiquement
Class.forName(sun.jdbc.odbc.JdbcOdbcDriver)
 (Cas 2) Avec un pilote spécifique fourni par le
vendeur/l'éditeur de la base de données
♦
♦
♦
♦
acquérir et installer un pilote JDBC
consulter http://servlet.java.sun.com/products/jdbc/drivers
charger le pilote JDBC
Class.forName(piloteClassName)
Cours n°11 : Java et bases de données - © A. Giorgetti & F. Sailhan, Université de Franche-Comté
9
Démarche à suivre avec la technologie
JDBC (II)
• Se connecter à la source de données
 Méthode statique de la classe
java.sql.DriverManager
 Cas 1
Connection c=DriverManager.getConnection
(jdbc:odbc:sourceDonnees)
 Cas 2
Connection c=DriverManager.getConnection
(jdbc:pilotClassName)
 Le DriverManager cherche un pilote adapté chargé
(par exemple il trouve le pont JDBC-ODBC)
• Effectuer les requêtes dans la base de données
Cours n°11 : Java et bases de données - © A. Giorgetti & F. Sailhan, Université de Franche-Comté
10
Déclaration du pilote JDBC - exemple
import java.sql.*;
public class ExempleJDBC{
public static void main(String[] Args)
{
try {
Class.forName("org.gjt.mm.mysql.Driver");
}
catch (Exception E) {
System.err.println("Pas de pilote !");
}
... connexion et utilisation de la base ...
}
}
Cours n°11 : Java et bases de données - © A. Giorgetti & F. Sailhan, Université de Franche-Comté
11
Connexion à la base de données exemple
try {
String url =
"jdbc:mysql://localhost/dbessai";
Connection con = DriverManager.getConnection(
url, "loginUsr", "usrPsswd");
/* … Utilisation de la base de données
… */
} catch (SQLException e) {
System.err.println(e.getMessage());
}
Cours n°11 : Java et bases de données - © A. Giorgetti & F. Sailhan, Université de Franche-Comté
12
Requête en base de données - exemple
Statement st = conn.createStatement();
lancement
requête SQL
ResultSet rs = st.executeQuery(
"SELECT nom, departement FROM commune");
while (rs.next()) {
extraction (réitérée)
du résultat
System.out.println("Nom : " +
rs.getString(1));
System.out.println(“Département : " +
rs.getString(2));
}
rs.close();
st.close();
conn.close();
fermeture
Cours n°11 : Java et bases de données - © A. Giorgetti & F. Sailhan, Université de Franche-Comté
13
Bases de données orientées objet
• DB4O est un système de base de données
orienté objet qui
 fournit un stockage persistant de données complexes
♦ Tableaux, collections, …
♦ Objets, liés ensemble par héritage
 fournit des fonctionnalités avancées (gestion des
transactions, cryptage, réplication, interface
utilisateur)
 se caractérise par une configuration et une
maintenance des bases de données facile à effectuer
Cours n°11 : Java et bases de données - © A. Giorgetti & F. Sailhan, Université de Franche-Comté
14
Démarche à suivre avec db4o (I)
• Configuration d'une OODB
 Acquérir une distribution de db4o (http://db4o.com)
 Installer la distribution
♦ Pour db4o avec eclipse : ajouter en tant que librairie les
fichiers jar fournis dans la distribution
• Utilisation d'une OODB
 Accéder à une base de donnée existante ou à créer
vObjectContainer db =
db4o.openFile("chemin/vers/base/fichierBD");
 Ajouter une entrée dans la base de données
Commune besancon = new ("Besancon", "Doubs");
db.set(besancon);
Cours n°11 : Java et bases de données - © A. Giorgetti & F. Sailhan, Université de Franche-Comté
15
Démarche à suivre avec db4o (II)
• Requête simple en base de données
Commune uneCommune = new Commune(null, null)
ObjectSet result = db.get(uneCommune)
while (result.hasNext()) {
Commune communeRecherchee = result.next(); ...}
• Requête complexe en base de données
 Création d'une requête pour la base de donnée désignée par db
Query requete = db.query();
 Création d'une contrainte
Query.constraint(Commune.class);
Query.descend("nom").constraint("Besancon");
objectSet result = query.execute();
• Suppression d'une entrée de la base de données
 extraction de l’objet de la base de données
ObjectSet result = db.get(uneCommune);
Commune communeRecherchee = result.next();
 suppression de l’objet
ObjectSet result = db.deleted(communeRecherchee);
Cours n°11 : Java et bases de données - © A. Giorgetti & F. Sailhan, Université de Franche-Comté
16
Téléchargement