Подключение к удаленной базе данных MySQL с помощью Android - PullRequest
1 голос
/ 04 июля 2011

У меня есть база данных MySQL на сервере.Я хотел бы знать, как я мог бы подключиться к моей удаленной БД и показать данные в моем приложении для Android.

Я знаю, что это путь с WebService или прямой, но я не знаю больше, чем это.

У меня есть скрипт, пишущий на Php, который сидит на сервере и позволяет подключиться к БД

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

Спасибо за помощь !!!

1 Ответ

3 голосов
/ 04 июля 2011

Сторона приложения 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;
}

Сторона сервера:

, поэтому файл GetAllData.php на сервере:

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

Это пример Iиспользовал недавно.Просто отметить в файле php.Я импортирую Connection.php, это касается только подключения к базе данных.Так что просто замените его своим кодом для подключения к MYSQL db.Также я импортировал SendAPI.php (который вы можете просто проигнорировать). Это был мой класс для отправки данных.В основном он содержал некоторые запросы, которые я хотел использовать.Например, sendAccelerationData ().В основном класс был аналогичен классу хранимых процедур.

Способ подключения к базе данных был указан в моем классе 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);
}
}

Примечание: в сообщениях об ошибках я распечатал схему из БД, напримеримя базы данных / имя таблицы.Это было просто устранение неисправностей.Я советую против этого.ВЫ НЕ ХОТИТЕ отображать эту информацию пользователю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...