Mysql
 sql >> Database >  >> RDS >> Mysql

Connettiti a un database MySQL remoto utilizzando Android

Lato app 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;
}

Lato server:

quindi il file GetAllData.php sul server è:

<?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();
?>

Questo è un esempio che ho usato di recente. Solo per notare nel file php. Importo Connection.phpquesto si occupa solo della connessione al database. Quindi sostituiscilo con il tuo codice per la connessione a MySQL db. Inoltre ho importato SendAPI.php (che puoi semplicemente ignorare) Questa era solo la mia classe per l'invio di dati. Fondamentalmente conteneva alcune delle query che volevo usare. Come sendAccelerationData(). Fondamentalmente la classe era simile a quella delle stored procedure.

Il modo in cui mi sono connesso al database era nella mia 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);
}
}

Nota nei messaggi di errore che ho stampato lo schema fuori db come nome db/nome tabella. Questa era solo la risoluzione dei problemi. Io sconsiglio questo. NON vuoi mostrare queste informazioni all'utente.