2011-07-04 4 views
0

J'ai une base de données distante qui se trouve dans un serveur.Android, connexion à une base de données distante (MySql)

Je voudrais savoir comment je pourrais me connecter à ma base de données distante et montrer les données dans mon application Android.

Je sais que c'est un moyen avec WebService ou direct mais je ne sais pas plus que ça.

J'apprécierai l'aide et si possible l'exemple.

J'ai une écriture de script dans Php qui assis sur le serveur que laisser se connecter au db

$db = mysql_connect("localhost", "UserName", "Password") or die (mysql_error()); 
mysql_select_db("NameofDB",$db) or die (mysql_error()); 

Merci de nous aider !!!

Répondre

2

côté application Android:

private ArrayList<String> receiveData(String file, ArrayList<NameValuePair> data) 
{ 
    InputStream is = null; 
    ArrayList<String> output = new ArrayList<String>(); 
    String line = null; 

    //Connect and obtain data via HTTP. 
    try 
    { 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpPost httppost = new HttpPost("http://www.blah.com/"+file); 
     httppost.setEntity(new UrlEncodedFormEntity(data)); 
     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()); 
    } 

    //Parse data into ArrayList and return. 
    try 
    { 
     BufferedReader reader = 
      new BufferedReader(new InputStreamReader(is,"iso-8859-1")); 

     while ((line = reader.readLine()) != null) 
     { 
      //Parse data into tokens and removing unimportant tokens. 
      StringTokenizer st = new StringTokenizer(line, delims, false); 

      while(st.hasMoreTokens()) 
      { 
       String token = st.nextToken(); 
       output.add(token); 
      } 
     } 

     is.close(); 
     //Log output of data in LogCat. 
     Log.d("DATA","DATA:"+output); 

    } 
    catch(Exception e) 
    { 
     Log.e("log_tag", "Error converting result "+e.toString()); 
    } 
    return output; 
} 

/** 
* Gets all data from GetAllData.php 
* @return output - ArrayList containing data. 
*/ 
public ArrayList<String> getAllData(String row) 
{ 
    fileName = "GetAllData.php"; 

    //Add arguments to arrayList<NameValuePairs> so we can encode the data and send it on. 
    ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1); 
    nameValuePairs.add(new BasicNameValuePair("row", row)); 

    ArrayList<String> output = this.receiveData(fileName, nameValuePairs); 
    return output; 
} 

côté serveur:

donc le fichier GetAllData.php sur le serveur est:

<?php 
/* 
* What this file does is it: 
* 1) Creates connection to database. 
* 2) Gets data from database. 
* 3) Encodes data to JSON. So this data can then be used by Android Application. 
* 4) Close database connection. 
*/ 
require_once $_SERVER['DOCUMENT_ROOT'].'/Clarity/Connection.php'; 
require_once $_SERVER['DOCUMENT_ROOT'].'/Clarity/ReceiveAPI.php'; 

$server = new Connection(); 
$receive = new ReceiveAPI(); 

//Retrieve information. 
$row = $_POST['row']; 

//Connect to database. 
$server->connectDB(); 
$output = $receive->getAllData($row); //basically method to query database. 
print(json_encode($output)); //output is result of the query given back to app. 

//Disconnect from database. 
$server->disconnectDB(); 
?> 

Ceci est un exemple je récemment. Juste pour noter dans le fichier php. J'importe Connection.php ceci traite juste de la connexion à la base de données. Il suffit donc de remplacer cela par votre code de connexion à MYSQL db. J'ai aussi importé SendAPI.php (que vous pouvez simplement ignorer) C'était juste ma classe pour envoyer des données. Fondamentalement, il contenait certaines des requêtes que je voulais utiliser. Comme sendAccelerationData(). Fondamentalement, la classe était similaire à celle des procédures stockées.

Comment je me suis connecté à la base de données était dans ma classe Connection.php.

//Connect to a database. 
public function connectDB() 
{ 
    //Connect to SQL server. 
    $this->connection = mysql_connect($this->hostName,$this->user,$this->password); 

    if (!$this->connection) 
    { 
     die('Could not connect: ' . mysql_error()); 
    } 
    //Print("Connected to MySQL. </br>"); 

    //Select Database to query. 
    $db_selected = mysql_select_db($this->database); 
    if (!$db_selected) 
    { 
     die('Could not select database' . mysql_error()); 
    } 
    //Print("Database \"$this->database\" selected. </br>"); 
} 

//Disconnect from database. 
public function disconnectDB() 
{ 
    mysql_close($this->connection); 
} 
} 

Remarque dans les messages d'erreur J'ai imprimé le schéma sur db tel que nom/nom de table db. C'était juste un dépannage. Je conseille contre cela. Vous ne voulez pas afficher cette information à l'utilisateur.

Questions connexes