Android 连接Mysql进行相关操作——用PHP做中介以及JSON做数据交换

这个方法是参考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>

上面的文件是我的,就是粉红色那句,加上运行看看结果吧!祝大家成功!
我的结果:


  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值