BTS SIO : la programmation Androïd La programmation sous Android : Persistance des données : avec base de données PRESENTATION DU TD Nous reprendre la correction du jeu du pendu pour charger les mots depuis une base de données. MISE EN PLACE J'ai créé pour vous une base de données WORDBDD sur le serveur postgres du réseau local SIO. (adresse 172.18.207.1). Cette base est accessible depuis un client postgres avec le login "postgres" "0550002D". Vérifiez pour commencer que vous pouvez vous y connecter. Dans Eclipse, il est nécessaire d'importer le fichier .jar (paquet librairie java externe) pour l'accès à PostgreSQL. Une version compatible Androïd est téléchargeable sur : https://groups.google.com/forum/?fromgroups#!topic/pgandroid/2LQA8Dn2bV8 Une fois le fichier .jar récupéré, il faut : Créer un répertoire libs dans votre projet Y déposer le fichier jar (postgresql.jar) Dans les propriétés du projet, il faut ajouter le dossier libs au java build path : Si la configuration est correcte, vous devriez voir apparaître la librairie dans les "Android dependencies" : 1 BTS SIO : la programmation Androïd INTERACTION AVEC LA BDD Pour l'utilisation de la bibliothèque, nous travaillerons avec un cours de Mark Wong de l'université d'Ottawa (fichier pdf joint). Celui ci couvre la plupart des besoins d'un développeur pour l'accès à une base postgres. Notez qu'après plusieurs tests, il semblerait que le Driver fourni par ce développeur ne soit pas compatible avec les machines sous Androïd 4. Ceci fonctionne parfaitement en 2.3 pour le moment (versions 3 à tester si vous avez du temps à la fin du TP). Par exemple, reprenons notre projet et faisons en sorte de charger les mots du pendu depuis la base de données : On crée tout d'abord un DAO pour les mots : (interface IDAO, PGDAO et MotDAO) package metier; import java.util.ArrayList; public interface IDAO { public void create(Object o); public void update(Object o); public void delete(Object o); public Object findById(Object id); public ArrayList<Object> findAll(); } package metier; import import import import java.sql.Connection; java.sql.DriverManager; java.sql.SQLException; java.util.ArrayList; public abstract class PGDAO implements IDAO { protected Connection conn; public PGDAO(){ try { Class.forName("org.postgresql.Driver"); String url = "jdbc:postgresql://193.252.48.172:5432/WORDBDD"; this.conn = DriverManager.getConnection(url, "postgres", "0550002D"); System.out.println("CONNECTION SUR " + url + " avec "+this.conn.toString()); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public abstract @Override public abstract @Override public abstract @Override public abstract @Override public abstract void create(Object o); void update(Object o) ; void delete(Object o); Object findById(Object id); ArrayList<Object> findAll(); } 2 BTS SIO : la programmation Androïd package metier; import import import import import java.sql.DriverManager; java.sql.ResultSet; java.sql.SQLException; java.sql.Statement; java.util.ArrayList; public class MotDAO extends PGDAO { public MotDAO() { super(); } @Override public void create(Object o) { } @Override public void update(Object o) { } @Override public void delete(Object o) { } @Override public Object findById(Object id) { return null; } @Override public ArrayList<Object> findAll() { ArrayList<Object> liste = new ArrayList<Object>(); try { String sql = "select * from words"; Statement stmt = this.conn.createStatement(); ResultSet rs = stmt.executeQuery(sql); while(rs.next()){ Mot m = new Mot(); m.setId(rs.getInt(1)); m.setLemot(rs.getString(2)); liste.add(m); } rs.close(); stmt.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return liste; } } Travail à faire : Après avoir modifié votre code pour que les mots soient choisis parmi ceux figurant dans la BDD et l'avoir testé, vous devrez : - regarder la table STATS dans la base de données et vous en servir pour y enregistrer l'issue de chaque partie. Quand on gagnera où que l'on perdra, le programme devra y ranger les informations sur la partie qui vient d'être jouée. - ajouter sur l'application une possibilité pour l'utilisateur de saisir son nom afin que celui ci figure dans la table STATS à la fin d'une partie. 3