Android的,连接到远程数据库(MySQL的) [英] Android ,connecting to a remote DB (MySql)
问题描述
我有一个远程数据库的坐在一台服务器。
I have a remote DB that sitting in a server.
我想知道我怎么能连接到我的远程数据库并显示数据到我的Android应用程序。
I would like to know how i could connect to my remote DB and show the data into my android app.
我知道这是WebService的或直接的方式,但我不知道更多的话。
I know that is a way with WebService or direct but i don't know more then that.
我会AP preciate帮助,如果可能的例子。
I will appreciate help and if possible example.
我在PHP脚本写的坐在服务器又让连接到数据库
I have a script write in Php that sitting in the server that letting connect to the db
$db = mysql_connect("localhost", "UserName", "Password") or die (mysql_error());
mysql_select_db("NameofDB",$db) or die (mysql_error());
感谢您的帮助!
Thanks for helping!!!
推荐答案
Android应用面:
Android app side:
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文件是:
so then the GetAllData.php file on server is:
<?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 这只是涉及的是连接到数据库。因此,只需更换,以你的code,用于连接到MySQL数据库。此外,我进口SendAPI.php(可以忽略),这只是我的类用于发送数据。基本上,它包含了一些我想用querys的。如sendAccelerationData()。基本上类是类似于存储过程。
This is an example I used recently. Just to note in the php file. I import Connection.php this just deals with the connection to the database. So just replace that with your code for connecting to MYSQL db. Also I imported SendAPI.php (which you can just ignore)This was just my class for sending data. Basically it contained some of the querys I wanted to use. Such as sendAccelerationData(). Basically class was similar to that of stored procedures.
我如何连接到数据库是在我Connection.php类。
How I connected to database was in my Connection.php class.
//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);
}
}
请注意在错误消息我打印出来的模式出来分贝,如数据库名/表名。这只是故障排除。我反对这个建议。你不想显示该信息给用户。
Note in error messages I printed out schema out db such as db name/table name. This was just troubleshooting. I advice against this. YOU DO NOT want to display that information to the user.
这篇关于Android的,连接到远程数据库(MySQL的)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!