Connessione ad un db remoto

Salve androidiani e bentornati. Oggi vorrei mostrarvi un modo semplice ed rapido per realizzare una applicazione per sistema operativo Android in grado di connettersi ad un database remoto mySql.

Per realizzare tale operazione saranno necessari:

  • un file .php in grado di connettersi al database ed eseguire una query
  • una semplice app che gestisca il tutto.

 

File php lato server

Concentriamoci subito sulla parte più semplice dell’applicazione e cioè la realizzazione di un semplice file php in grado di connettersi ad un db remoto e di eseguire una query al database, passata dall’applicativo Android stesso. Di seguito il codice.

<?php
$db_host = "yourDbHost";
$db_name = " yourDbName ";
$db_user = " yourDbUser ";
$db_password = " yourDbPass ";

//connessione al database
$db = mysql_connect($db_host, $db_user, $db_password);

if ($db == FALSE) die ("Errore nella connessione. Verificare i parametri nel file connection.php");

mysql_select_db($db_name, $db)
    or die ("Errore nella selezione del database. Verificare i parametri nel file connection.php");

//preleviamo la query passataci dall’applicazione
$query = $_REQUEST['querySend'];

//eseguiamo la query
$result = mysql_query ($query);
while($e=mysql_fetch_assoc($result))
$output[]=$e;

//stampiamo il risultato in formato json
print(json_encode($output));
?>

Create, dunque, un file con estensione .php ed hostatelo sul vostro server o in un qualunque punto della rete. Nel nostro esempio il file viene chiamato query.php.

Applicazione Android

Di seguito non fornirò una intera applicazione ma la classe che si occupa di eseguire una query al nostro database e che ne restituisce il risultato. Questo risultato sarà poi gestito da voi in base alle vostre esigenze.

Ecco la classe, denominata sendQuery, che consente l’interrogazione al database.

 

public class sendQuery {
/////////// Public method to send Query ///////////
public static String send(String query) {
String result = "0";
InputStream is = null;

  //the query to send
  ArrayList<NameValuePair> querySend = new ArrayList<NameValuePair>();

  querySend.add(new BasicNameValuePair("querySend",query));

  //http post
  try{
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost("http://www.tuosito.it/query.php");
    httppost.setEntity(new UrlEncodedFormEntity(querySend));
    HttpResponse response = httpclient.execute(httppost);
    HttpEntity entity = response.getEntity();
    is = entity.getContent();
  }catch(Exception e){
    Log.e("log_tag", "Error in http connection "+e.toString());
  }

  //convert response to string
  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());
  }

  Log.i("SendQUERY", result);
  return result;
  }
}

Tale classe accetta in ingresso una stringa denominata query che verrà inoltrata al file query.php che effettuerà la query. La stessa classe sendQuery si occupa di convertire la stringa in formato json, ritornata dal file php, in una semplice stringa in modo da poter essere gestita in maniera agevole. La classe sendQuery potrà essere scritta in un file java isolato, dentro il vostro progetto, e potrà essere richiamata da qualunque parte del codice richiamandola con:

String result = sendQuery.send(“SELECT * FROM test”);

Aggiornamento 03/04/2012
Visto che c’è stato qualche problemino, ho realizzato questo semplice esempio android per la connessione al DB. L’unica cosa da inserire nell’activity è il dominio a cui connettersi e, ovviamente la query.
Il risultato dell’interrogazione verrà stampato a schermo.