Connecter une application Android à une base de données

Connecter une application Android à une base de données

Ce tutoriel décrit la façon d'accéder à une base de données sous Android. Pour écrire ce tutoriel, je me suis basé sur cet article : http://www.helloandroid.com/tutorials/connecting-mysql-database

Il est impossible de se connecter à une base de données directement sous android.

La méthode la plus répandue pour se connecter à une base de données MySQL à distance à partir d'un appareil Android, est de mettre en place un script PHP et d'éxécuter ce script en utilisant le protocole http.

Description de l'exemple

Supposons que nous avons une base de données nommée PeopleData qui contient une tablée crée avec la requête suivante :

CREATE TABLE 'people' (
    'id' INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    'name' VARCHAR( 100 ) NOT NULL ,
    'sex' BOOL NOT NULL DEFAULT '1',
    'birthyear' INT NOT NULL
)

Nous voulons obtenir la liste des personnes nées après une certaine date.

Solution

Script php

Le script php à créer est getAllPeopleBornAfter.php, ce script permet d'accéder à la base de données.

Pour que le programme PHP puisse dialoguer avec le programme Android, nous passons dans la requête une variable year qui sera valorisée dans l'url appelée par le programme.

Le code php permettant de se connecter à une base de données est le suivant :

<?php
    mysql_connect("host","username","password");
    mysql_select_db("PeopleData");
 
    $q=mysql_query("SELECT * FROM people WHERE birthyear>'".$_REQUEST['year']."'");
    while($e=mysql_fetch_assoc($q))
        $output[]=$e;
    print(json_encode($output));
    mysql_close();
?>

Code sous android

Le code doit réaliser les opérations suivantes :

  • utiliser un HttpPost pour obtenir les données en passant en paramètre l'année souhaitée
  • convertir la réponse en une chaine de caractères
  • Parser ls données JSON
String result = "";
// L'année à envoyer
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("year","1980"));
 
// Envoi de la requête avec HTTPPost
try{
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("http://example.com/getAllPeopleBornAfter.php");
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        HttpResponse response = httpclient.execute(httppost);
        HttpEntity entity = response.getEntity();
        InputStream is = entity.getContent();
}catch(Exception e){
        Log.e("log_tag", "Error in http connection "+e.toString());
}

//Conversion de la réponse en chaine
try{
        BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
        }
        is.close();
 
        result=sb.toString();
}catch(Exception e){
        Log.e("log_tag", "Error converting result "+e.toString());
}
 
// Parsing des données JSON
try{
        JSONArray jArray = new JSONArray(result);
        for(int i=0;i<jArray.length();i++){
                JSONObject json_data = jArray.getJSONObject(i);
                Log.i("log_tag","id: "+json_data.getInt("id")+
                        ", name: "+json_data.getString("name")+
                        ", sex: "+json_data.getInt("sex")+
                        ", birthyear: "+json_data.getInt("birthyear")
                );
        }
}
}catch(JSONException e){
        Log.e("log_tag", "Error parsing data "+e.toString());
}

Il est possible d'utiliser le protocole https pour envoyer le mot de passe permettant d'accéder à la base de données.

Ce document intitulé « Connecter une application Android à une base de données » issu de CodeS SourceS (codes-sources.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Rejoignez-nous