这个方法是参考http://www.anddev.org/networking-database-problems-f29/connecting-to-mysql-database-t50063.html 国外老外的一些经验所得。这里我总结一下要点:
1、需要一个mysql数据库,这个怎么搞出来,大家觉得有问题先学学mysql再回来接着看。
2、需要一个php操作mysql数据库的脚本,上传到服务器地址
3、需要修改Android的manifest文件,入网许可!!
一、首先我们假如已经把MYSQL数据库建立好了,写一个PHP操作文件上传到服务器访问地址
<?php
mysql_connect("localhost","yourName","yourPassword");
mysql_select_db("yourDB");
$q=mysql_query("SELECT * FROM user_info WHERE uName ='".$_REQUEST['name']."'");
while($e=mysql_fetch_assoc($q))
$output[]=$e;
print(json_encode($output));
mysql_close();
?>
稍微解析一下上面PHP内容,
$q=mysql_query("SELECT * FROM user_info WHERE uName ='".$_REQUEST['name']."'");
这句当中
.$_REQUEST['name'].
就表示要从android里面输入到这里的一个键值对的值,id为name,下面我们写Android程序会再说明一下。
json_encode($output));
这个就是把输出的结果转成json的数据格式返回给Android进行json数据解析。
二、准备写Android关键的实现连接Mysql方法
//连接MYSQL数据库方法
//并且返回结果
private String checkServerDataByName()
{
//数据流
InputStream is = null;
//返回值
String result = "";
String returnResult ="";
//这里增加要传送到PHP进行MYSQL操作的名称条件
ArrayList<NameValuePair> nameValuePair = new ArrayList<NameValuePair>();
nameValuePair.add(new BasicNameValuePair("name", mInputName));
//Http post
try {
/*创建一个HttpClient的一个对象*/
HttpClient httpClient = new DefaultHttpClient();
/*创建一个HttpPost的对象*/
//MYSQL_0代表我上传的上面写得PHP文件服务器地址
HttpPost httpPost = new HttpPost(MYSQL_0);
/*设置请求的数据*/
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair));
/*创建HttpResponse对象,处理请求*/
HttpResponse response = httpClient.execute(httpPost);
/*获取这次回应的消息实体,获取返回的实体消息*/
HttpEntity entity = response.getEntity();
/*把这些消息指向对象实体的数据流*/
is = entity.getContent();
} catch (Exception e) {
// TODO Auto-generated catch block
Log.e("log_tag", "Error in http connection "+e.toString());
}
//接下来对上面能够获取返回的IS数据流进行相关处理
//这里不懂的可以先看看JAVA里面的IO流
try {
BufferedReader br = new BufferedReader(new InputStreamReader(is,
"iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = br.readLine()) != null) {
sb.append(line + "\n");
}
is.close(); //读完记得一定要关闭,其实这个应该放到finally块里面,这里偷懒了
result = sb.toString();
} catch (Exception e) {
// TODO: handle exception
Log.e("log_tag", "Error converting result "+e.toString());
}
try {
//转换为json data类型
JSONArray jArray = new JSONArray(result);
if (jArray.length() > 0) {
for (int i = 0; i < jArray.length(); i++) {
JSONObject json_data = jArray.getJSONObject(i);
//通过返回的json储存的搜索过得mysql列表值进行获取
returnResult = "Your Id = " + json_data.getInt("uID");
}
} else {
returnResult = "Can't find Your name!";
}
} catch (Exception e) {
// TODO: handle exception
Log.e("log_tag", "Error parsing data "+e.toString());
}
return returnResult;
}
以上补充说明:
ArrayList<NameValuePair> nameValuePair = new ArrayList<NameValuePair>();
nameValuePair.add(new BasicNameValuePair("name", mInputName));
这两段就是创建了一个键值对,通过HttpPost的方式给服务器第一条上传的PHP进行交互,我们看到“name”就是第一条中搜索语句里面的name,而我这里mInputName是我的Android程序通过一个EditText框通过用户输入后进行获取的String.
小结以上关键点:
1、HttpClient、HttpPost、HttpResponse、HttpEntity这些知识点,主要和网络上的PHP中介进行操作MYSQL的一个交互。
2、接着要用到JAVA里面的IO流,像网络IO最好使用BufferedReader,然后StringBuilder把读出来的数据一行一行build进来。
3、最后要学会用JSON把上面StringBuilder一行一行读出来的内容,其实转回了String对象,上面提及的是result,通过把这个result转成Json data,这里用
JSONArray jArray = new JSONArray(result);
那么我们就可以直接jArray长度看有返回多少个搜索完后的Mysql表行
JSONObject json_data = jArray.getJSONObject(i);
如果存在这些表行值,那么把它们一个一个获取出来,转化成JSONObject对象,就相当于一行MYSQL结果一个Object的形式,方便用getInt或者getString通过相应的列名进行获取结果。
三、上面其实操作已经完成了,下面修改一下Android的manifest文件进行入网许可
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="chiuan.android"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="10" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:label="@string/app_name"
android:name=".HelloChiuanActivity" >
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:label="@string/outPutScreen"
android:name=".OutPutActivity"
></activity>
</application>
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>
上面的文件是我的,就是粉红色那句,加上运行看看结果吧!祝大家成功!
我的结果:
![](http://oi44.tinypic.com/ncxl09.jpg)