admin 管理员组

文章数量: 887021


2023年12月19日发(作者:二维数组的输出)

Android远程连接 MYSQL

Android虽然自带包,但是各数据库的JDBC Driver是否可用争议很多,不论国内网站还是国外网站,有人说能用,有人说不行,有人说虚拟机上能跑,上真手机就不行,有人说自己在手机上测试过也能跑。

但不管怎么说,直接连接远程数据库被公认不是一个很好的做法,至少在安全性上非常差的,所以现在最简单也是最流行的做法是访问远程服务器前段的PHP,PHP函数完成数据库操作,把结果经过JSON编码后传回,Android端再parse出结果。

SQL数据库创建测试表people 代码如下:

CREATE TABLE `people` (

`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,

`name` VARCHAR( 100 ) NOT NULL ,

`sex` BOOL NOT NULL DEFAULT '1',

`birthyear` INT NOT NULL

)

PHP前端文件代码如下,查询出生年月在year之后的人:

mysql_connect("host","username","password");

mysql_select_db("PeopleData");

$q=mysql_query("SELECT * FROM people WHERE

birthyear>'".$_REQUEST['year']."'");

while($e=mysql_fetch_assoc($q))

$output[]=$e;

print(json_encode($output));

mysql_close();

?>

Android客户端的方法略微复杂一点,代码如下:

String result = "";

//首先使用NameValuePair封装将要查询的年数和关键字绑定

ArrayList nameValuePairs = new

ArrayList();

(new BasicNameValuePair("year","1980"));

//使用HttpPost封装整个SQL语句

//使用HttpClient发送HttpPost对象

try{

HttpClient httpclient = new DefaultHttpClient();

HttpPost httppost = new

HttpPost("localhost/");

ity(new

UrlEncodedFormEntity(nameValuePairs));

HttpResponse response = e(httppost);

HttpEntity entity = ity();

InputStream is = tent();

}catch(Exception e){

Log.e("log_tag", "Error in http connection "+ng());

}

//将HttpEntity转化为String

try{

BufferedReader reader = new BufferedReader(new

InputStreamReader(is,"iso-8859-1"),8);

StringBuilder sb = new StringBuilder();

String line = null;

while ((line = ne()) != null) {

(line + "n");

}

();

result=ng();

}catch(Exception e){

Log.e("log_tag", "Error converting result "+ng());

}

//将String通过JSONArray解析成最终结果

try{

JSONArray jArray = new JSONArray(result);

for(int i=0;i<();i++){

JSONObject json_data = NObject(i);

Log.i("log_tag","id: "+json_("id")+

", name: "+json_ing("name")+

", sex: "+json_("sex")+

", birthyear: "+json_("birthyear")

);

}

}

}catch(JSONException e){

Log.e("log_tag", "Error parsing data "+ng());

}


本文标签: 数据库 远程 查询 封装 使用