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.
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.
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(); ?>
Le code doit réaliser les opérations suivantes :
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.
20 mars 2020 à 21:20