290 likes | 454 Views
Connexion base de données. Mini-projets Java-BD 2011-2012. Wael Mallek Imed Amri. JDBC API ?. API d’interaction avec un SGBD contenant : un ensemble de classes et d’interfaces ne fournit pas les classes qui implantent les interfaces Permet de: Établir une connexion avec un SGBD
E N D
Connexion base de données Mini-projets Java-BD 2011-2012 WaelMallek Imed Amri
JDBC API ? • API d’interaction avec un SGBD contenant : • un ensemble de classes et d’interfaces • ne fournit pas les classes qui implantent les interfaces • Permet de: • Établir une connexion avec un SGBD • Envoyer des requêtes SQL • Récupérer des résultats de requêtes
Drivers ? • Drivers • chaque SGBD utilise un pilote (driver) qui lui est propre et qui permet de convertir les requêtes JDBC dans le langage natif du SGBD • le driver est un ensemble de classes qui implantent les interfaces de JDBC • les drivers sont le lien entre le programme Java et le SGBD
Base MySQL • Créer une base mysql ‘esprit’
Projet Java • Créer un nouveau Projet : Java Application • Ajouter la Librairie MySQL JDBC Driver
Méthode Main • Les Attribues de la classes : • static String url = "jdbc:mysql://localhost/esprit"; • static String user = "root"; • static String pwd = ""; • staticConnectionconn; • staticStatementste;
Méthode Main • Charger le Driver • Class.forName("com.mysql.jdbc.Driver"); • Etablir une connexion • conn = DriverManager.getConnection(url, user, pwd); • Traiter les exceptions • ClassNotFoundException • SQLException
Méthode Main • Les Attribues de la classes : • static String url = "jdbc:mysql://localhost/esprit"; • static String user = "root"; • static String pwd = ""; • staticConnectionconn; • staticStatementste;
Méthode Main • Créer un STATEMENT • ste = conn.createStatement(); • Requete SQL d’ajout • String req = "Insert into personne values("+null+",'A2','3info')"; • Executer la Requete • ste.executeUpdate(req) (insert, update, delete) • ste.executeQuery(req) select
Méthodes CRUD • Créer 4 méthodes static : • staticvoid Ajouter(String Nom, String Prenom){ } • staticvoidUpdatePrenom(int id, String Prenom){ } • staticvoidDelete(int id){ } • staticvoidAfficherAll(){ } Utiliser le ResultSet pour récupérer le résultat de executeQuery • ajouter throwsSQLException pour chaque Methode
Correspondance Java / BD Type JDBC/SQL Méthode Java • CHAR, VARCHAR getString() • BINARY, VARBINARY getBytes() • BIT getBoolean() • INTEGER getInt() • BIGINT getLong() • SMALLINT getShort() • REAL getFloat() • DOUBLE, FLOAT getDouble() • DATE getDate() • TIME getTime() • TIME STAMP getTimeStamp()
Design Pattern • Singleton : permet d’instancier l’objet qu’une seule fois.
Design Pattern • Singleton : (dans notre cas) • un attribut statique • privatestaticConnectionconn; • un constructeur déclaré en privé • privateMyConnection() { … } • une méthode statique servant de pseudo-constructeur • public staticConnectiongetInstance() { … }
Design Pattern • DAO : Permet de regrouper les accès aux données persistantes dans des classes à part. • Séparation entre la couche Métier et les données.
Les Packages • Créer 4 packages • Entite • Classe Personne • DAO • Classe PersonneDAO • Metier • Classe MyConnection • Test • Classe Main
Metier • privatestaticConnectionconn; • privateMyConnection() { } • public staticConnectiongetInstance(){ if(conn==null) { MyConnectionaa = new MyConnection(); } return conn; }
Entite • Créer une classe Personne • privateint id; • private String nom; • private String prenom; • Générer les constructeurs • Générer les Getters et les Setters
DAO • Créer une Classe PersonneDAO • Connectionconn=MyConnection.getInstance(); • Statementste; • Méthodes CRUD • public int Ajouter (Personne p) • public Vector<Personne> readAll() • public boolean update (Personne p) • public booleandelete (int id) • public Personne findById (int id)
Ajouter public int Ajouter(Personne p) throwsSQLException { intcle=0; ste=conn.createStatement(); String reqinsert ="INSERT INTO `personne` ( `nom` , `prenom` ) " + "VALUES ('"+p.getNom()+"', '"+p.getPrenom()+"');"; ste.executeUpdate(reqinsert); ResultSetrs=ste.getGeneratedKeys(); while (rs.next()) { cle=rs.getInt(1); } return cle; }
DAO • Créer une Classe PersonneDAO • Connectionconn=MyConnection.getInstance(); • Statementste; • Méthodes CRUD • public int Ajouter (Personne p) • public Vector<Personne> readAll() • public boolean update (Personne p) • public booleandelete (int id) • public Personne findById (int id)
readAll() public Vector<Personne> readAll() throws SQLException{ Vector<Personne> v=new Vector<Personne>(); Statementste=conn.createStatement(); String req="Select * from personne;"; ResultSetrs=ste.executeQuery(req); while (rs.next()) { Personne p=new Personne(rs.getInt(1), rs.getString(2), rs.getString(3)); v.add(p); } return v; }
DAO • Créer une Classe PersonneDAO • Connectionconn=MyConnection.getInstance(); • Statementste; • Méthodes CRUD • public int Ajouter (Personne p) • public Vector<Personne> readAll() • public boolean update (Personne p) • public booleandelete (int id) • public Personne findById (int id)
update public boolean update(Personne p) throws SQLException { boolean test=false; Statementste=conn.createStatement(); String req="UPDATE `j2me`.`personne` SET `nom` ='"+p.getNom()+"' WHERE `personne`.`id` ="+p.getId()+";"; intres=ste.executeUpdate(req); if(res!=0) test=true; return test; }
DAO • Créer une Classe PersonneDAO • Connectionconn=MyConnection.getInstance(); • Statementste; • Méthodes CRUD • public int Ajouter (Personne p) • public Vector<Personne> readAll() • public boolean update (Personne p) • public booleandelete (int id) • public Personne findById (int id)
delete public boolean delete(int id) throws SQLException {boolean test=false; Statementste=conn.createStatement(); String req="DELETE FROM `j2me`.`personne` WHERE `personne`.`id` ='"+id+"';"; intres=ste.executeUpdate(req); if(res!=0) test=true; return test; }
DAO • Créer une Classe PersonneDAO • Connectionconn=MyConnection.getInstance(); • Statementste; • Méthodes CRUD • public int Ajouter (Personne p) • public Vector<Personne> readAll() • public boolean update (Personne p) • public booleandelete (int id) • public Personne findById (int id)
FindByID public Personne findById(int id){ Personne p = null; try { ste = conn.createStatement(); String req="select * from personne where id="+id; ResultSetrs=ste.executeQuery(req); rs.next(); p=new Personne(rs.getInt(1),rs.getString(2),rs.getString(3)); } catch (SQLException ex) { System.out.println("id n'existe pas"); } return p; }
Test • Instancier une PersonneDAO • PersonneDAO per=new PersonneDAO(); • Instancier une Personne • Personne p=new Personne(1,"esprit", "ecole"); • Ajouter une personne • Lire toutes les informations des personnes • per.Ajouter(p); • System.out.println(per.readAll());
Void Main public static void main(String[] args) { PersonneDAO per=new PersonneDAO(); Personne p=new Personne(1,"ffghf", "gfghg"); try { per.Ajouter(p); System.out.println(per.readAll()); } catch (SQLException ex) { } }