IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API standards et tierces Android Discussion :

Connexion base de données depuis Android


Sujet :

API standards et tierces Android

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Connexion base de données depuis Android
    Bonjour,

    Je tente de me connecter à une base de données qui est en local sur mon ordinateur depuis mon application android que je lance à l'aide de l'émulateur android fourni par le kit de développement.

    Mais je ne réussis pas à me connecter à ma base.

    Pour faire l'essai, j'ai créé une activité toute simple avec un bouton, et lors du clic sur le bouton, une tentative de connexion à la base de données. Ci-dessous ce que j'ai dans mon onClick :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    try {
       Class.forName("org.postgresql.Driver").newInstance();
       laChaine1 = "OK pour le 1";
    } 
     
    catch (Exception e) {
       // TODO Auto-generated catch block
       laChaine1 = "Erreur sur le 1";
    }
     
    String url = "jdbc:postgresql:http://10.0.2.2:5432/MaBase";
    String user = "postgres";
    String passwd = "mdp";
    try {
       Connection conn = DriverManager.getConnection(url, user, passwd);
       laChaine2 = "Connection OK";
    }
    catch (Exception e) {
       StringWriter sw = new StringWriter();
       PrintWriter pw = new PrintWriter(sw);
       e.printStackTrace(pw);
       laChaine2 = pw.toString();
    }
    ((TextView)findViewById(R.id.monLabel1)).setText(laChaine1);
    ((TextView)findViewById(R.id.monLabel2)).setText(laChaine2);
    Pour info, j'ai mis ici l'IP 10.0.2.2 car j'ai vu que c'était ce que l'on faisait à la place de localhost afin de ne pas tomber sur le localhost de l'émulateur (mais cela ne fonctionnait pas mieux en mettant directement "localhost" à la place).

    Lorsque je clique sur le bouton, dans mon application, j'obtiens le message qui est dans l'image en pièce jointe (java.io.PrintWriter@44f96d50).

    Pour info également, en faisant la même connexion à ma base de données depuis le main d'un projet java (non android) la connexion s'effectue correctement.

    Merci d'avance pour l'aide que vous pourrez m'apporter sur ce problème!
    Images attachées Images attachées  

  2. #2
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Points : 171
    Points
    171
    Par défaut
    Désolé pour le petit HS :
    Je me pose une question quand même, vu que le code source d' une application Android est facilement visible, c' est une bonne idée de faire des connexions à des BDD comme ça ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    541
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 541
    Points : 124
    Points
    124
    Par défaut
    êtes vous sûr que le port de l'émulateur correspond au port 5432?

    l'url ne devrait pas être plutot? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    jdbc:postgresql://10.0.2.2:5432/MaBase

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par jojo_ol76 Voir le message
    êtes vous sûr que le port de l'émulateur correspond au port 5432?

    l'url ne devrait pas être plutot? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    jdbc:postgresql://10.0.2.2:5432/MaBase
    Bonsoir jojo_ol76,

    Et merci pour votre réponse.

    Concernant l'url de connexion, j'avais en effet essayé également avec l'url :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jdbc:postgresql://10.0.2.2:5432/MaBase
    ... Mais pas mieux.

    Pour le port je ne sais pas qu'entendez-vous par le port de l'émulateur? Le port que je spécifie ici (5432) est celui de ma base de données, sur mon localhost (localhost de mon ordinateur). C'est bien celui-ci que je devrais attaquer depuis l'émulateur non?

    Merci à nouveau pour vos retours.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Sake_reflex, juste pour rebondir sur ce que tu disais : de ton côté quelle méthode utiliserais tu pour te connecter à une BDD en sql (externe) sans utiliser une méthode similaire, qui risquerait de laisser (trop) facilement voir le code qui appelle la BDD?

    Merci d'avance!

  6. #6
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Points : 171
    Points
    171
    Par défaut
    Salut dev50,
    Personnellement je n'ai jamais eu à manipuler une BDD externe et justement je posais cette question pour connaitre les alternatives.
    Mais si je devais en faire une je passerais surement par des web services, je pense que c'est bonne solution.

  7. #7
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Pour faire simple, JDBC n'existe pas sous android.

    Donc la connexion directe, tu peux oublier, et accessoirement ce serait une faille de sécurité assez blatante de laisser une base de données ouverte à tous les vents...


    La façon propre de faire est d'avoir un serveur intermédiaire entre la base et le téléphone. Ce serveur met à dispo des web services correspondant aux diverses actions que l'application peut réaliser vis à vis de la base. Cela évite que les user/password de la base se baladent tranquilou sur le réseau, et cela limite largement l'étendue des actions que les gens peuvent réaliser sur la base, donc in fine la protège.
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  8. #8
    Inscrit

    Profil pro
    Inscrit en
    Février 2008
    Messages
    658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 658
    Points : 892
    Points
    892
    Par défaut
    Un lien explique ici comment se connecter à une base de données sur Android
    http://jahbromo.blogspot.com/2010/07...-distante.html

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 41
    Points : 79
    Points
    79
    Par défaut
    La façon propre de faire est d'avoir un serveur intermédiaire entre la base et le téléphone. Ce serveur met à dispo des web services correspondant aux diverses actions que l'application peut réaliser vis à vis de la base. Cela évite que les user/password de la base se baladent tranquilou sur le réseau, et cela limite largement l'étendue des actions que les gens peuvent réaliser sur la base, donc in fine la protège.
    +1

    Toujours (ou le plus possible) passer par un serveur intermédiaire pour tout ce qui est mobile, ça donne de meilleurs résultats au niveau de la connectivité, en plus de ce que dit sinok.

  10. #10
    Membre du Club
    Homme Profil pro
    Développeur Web et Mobile
    Inscrit en
    Juin 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web et Mobile

    Informations forums :
    Inscription : Juin 2010
    Messages : 76
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par jahbromo Voir le message
    Un lien explique ici comment se connecter à une base de données sur Android
    http://jahbromo.blogspot.com/2010/07...-distante.html
    Non ! Il passe par un serveur avant. Il fait pas le lien directe entre l'application et la BDD.

  11. #11
    Inscrit

    Profil pro
    Inscrit en
    Février 2008
    Messages
    658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 658
    Points : 892
    Points
    892
    Par défaut
    Citation Envoyé par Xenonmax Voir le message
    Non ! Il passe par un serveur avant. Il fait pas le lien directe entre l'application et la BDD.
    Il n'existe pas un API dans Android qui permet de se connecter à une base distance sans passer par un service intermediaire!

  12. #12
    Membre régulier
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2002
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2002
    Messages : 12
    Points : 86
    Points
    86
    Par défaut
    Bonjour,

    Discussion assez intéressante. En complément des échanges que vous avez déjà eu ci dessus, je voudrais rajouter qques mots pour les développeurs qui aimeraient faire communiquer leur application Android avec une base de donnée distante.

    Quand vous développez une application les données sont la "richesse" de votre application, c'est le point critique à protéger à tout prix.
    Faut le voir comme un coffre fort dans une banque, vous remettez l'argent à un employé de la banque qui va le stocker dans un coffre planqué on ne sait où. Mettre un accès à la base de l'application sur l'application android c'est comme si l'employé de banque donne l'emplacement du coffre + les codes d’accès à n'importe qui.

    Un fichier apk c'est un vulgaire fichier "jar" remodelé. Il est facile de l'ouvrir et de décoder le code source dans le fichier "classes.dex". (http://www.google.fr/search?q=ouvrir+un+fichier+apk)

    Donc comme les collègues ci dessus je te conseilles de ne surtout pas attaquer directement un base d'une application android. Mieux vaut faire un ensemble de services qui seront appelés... Ces services encapsuleront les traitements sensibles.

    ++
    Pierre

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Et merci pour l'ensemble des réponses. Il y a juste quelques petits points que je ne comprends pas : d'une part, je comprends qu'il ne faut pas mettre de logins et/ou mots de passe dans le code d'android, puisqu'ils seront faciles à trouver et à intercepter, mais je ne comprends pas, par contre, pourquoi les choses seront moins risquées avec un webservice? Il ne faut pas une identification similaire pour utiliser un webservice? (à moins que l'authentification soit faite justement par l'application fournissant le service).

    En réalité, je ne sais pas trop comment fonctionnent les webservices : j'ai trouvé quelques tutos android qui permettent d'utiliser des webservices sous android, mais pas de tutos expliquant comment définir son propre webservice.

    Par ailleurs, j'ai vu dans la conversation que des personnes proposaient d'utiliser une étape intermédiaire : une page php en ligne, qui irait elle attaquer la base de données, afin que celle-ci ne soit pas appelée directement par l'application android. Cette solution est-elle "propre" ou comporte-t-elle des risques, également, de partager des logins ou mots de passe? Par ailleurs, dans la méthode proposée, j'ai vu que la page php effectuait une traduction en JSON des réponses aux requêtes, et je voulais savoir d'une part si une telle traduction était nécessaire,et d'autre part si le format JSON était obligatoire, ou si un format similaire, comme XML, était envisageable?

    Merci d'avance pour vos réponses.

    Cordialement

  14. #14
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    En ce qui concerne le coté WebService.
    En définissant des WebServices correspondant uniquement aux actions possibles dans ton application, tu limites les actions réalisables sur la base qui se trouve derrière. De fait tu limites les dégats sur la base, vu qu'ils ne peuvent être réalisés dans un cadre défini par les web services.

    Secondement, les logins/mdp/URL de ta base ne circuleront pas dans les requêtes de ton client vers ton serveur. Ces informations seront stockées sur le serveur en lui même. Ce qui permet d'éviter de compromettre les informations de ta base de données.

    La sécurité en est donc bien meilleure.

    De plus, il te faudra mettre en place un système d'authentification. Cette authentification initiale va générer un token, qui sera fourni au client et qui sera un paramètre obligatoire pour obtenir un résultat de la part des autres web services (on évitera de renvoyer les logins/mdp du user à chaque appel). Token qui devra avoir une durée de vie limitée bien sûr.

    Pour ce qui est de la définition des web services en eux même, ce n'est pas dans les tutos android qu'il faut chercher, mais au niveau de la techno que tu vas utiliser coté serveur (java, .NET, php, ...). Et pour ces technos là, les tutos de mise en place de web services ne manquent pas. Attention toutefois à éviter SOAP et préférer REST, SOAP étant un protocole peu adapté à ce qui est mobile de part sa verbosité.

    Ensuite, comme pour le point SOAP/REST, il est préférable d'utiliser du JSON au XML pour des raisons de coût, en effet, parser du XML est bien plus violent que parser du JSON, or tu es sur une device qui est limitée en puissance et batteries, donc il est préférable qu'elle aie le minimum d'opérations à réaliser. D'où la préférence du JSON.
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Et merci Sinok pour votre réponse.

    Malgré votre réponse, je ne trouve pas de tutoriels qui me correspondent à propos des webservices : en effet, je voudrais simplement créer un webservice qui me permette d'interroger ou de modifier une base de données, mais je ne trouve rien sur la façon de créer le webservice... Si quelqu'un a une bonne adresse sur ce sujet...

    Merci d'avance!

  16. #16
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Voici un tutoriel digne de ce nom sur la mise en place de Web Services REST en java: http://www.vogella.de/articles/REST/article.html

    Puis pour la mise en place des actions en base de données je te conseille le tutoriel suivant mettant en place le pattern DAO: http://cyrille-herby.developpez.com/...c-pattern-dao/

    A toi ensuite de faire le lien entre les deux, ça ne devrait pas être bien difficile
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  17. #17
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Merci! je vais essayer ça...

Discussions similaires

  1. Réponses: 11
    Dernier message: 17/06/2015, 09h32
  2. besoin d'aide : connexion base de données android
    Par messiilyes dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 14/03/2012, 14h44
  3. Connexion base de données depuis Android
    Par aladin2110 dans le forum API standards et tierces
    Réponses: 10
    Dernier message: 07/03/2012, 03h28
  4. Problème de connexion à la base de données depuis Forms
    Par souuumia dans le forum Connexions aux bases de données
    Réponses: 3
    Dernier message: 13/05/2008, 15h56
  5. Réponses: 9
    Dernier message: 20/01/2006, 12h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo