2011-07-04 201 views
0

我有一個坐在服務器上的遠程數據庫。Android,連接到遠程數據庫(MySql)

我想知道我如何連接到我的遠程數據庫並顯示數據到我的Android應用程序。

我知道這是一種WebService或直接的方式,但我不知道更多。

我會感謝幫助,如果可能的話。

我有一個PHP腳本寫的是坐在那個又讓連接到數據庫

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

感謝您的幫助服務器!

回答

2

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

這是我最近使用過的一個例子。只需在php文件中註明。我導入Connection.php 這只是處理與數據庫的連接。所以,只需用代碼連接到MYSQL數據庫即可。另外我導入了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); 
} 
} 

錯誤消息中的注意事項我打印出模式出db,如db名稱/表名。這只是故障排除。我反對這個建議。您不希望將該信息顯示給用戶。