这个方法是参考/networking-database-problems-f29/connecting-to-mysql-database-t50063.html国外老外的一些经验所得。
这里我总结一下要点:1、需要一个mysql数据库,这个怎么搞出来,大家觉得有问题先学学mysql再回来接着看。
2、需要一个php操作mysql数据库的脚本,上传到服务器地址3、需要修改Android的manifest文件,入网许可!!一、首先我们假如已经把MYSQL数据库建立好了,写一个PHP操作文件上传到服务器访问地址[php]view plaincopyprint?1<?php2 mysql_connect("localhost","yourName","yourPassword");3 mysql_select_db("yourDB");4 $q=mysql_query("SELECT * FROM user_info WHERE uName='".$_REQUEST['name']."'");5while($e=mysql_fetch_assoc($q))6 $output[]=$e;7 print(json_encode($output));8 mysql_close();9?>稍微解析一下上面PHP内容,[php]view plaincopyprint?10$q=mysql_query("SELECT * FROM user_info WHERE uName ='".$_REQUEST['name']."'"); 这句当中[php]view plaincopyprint?11.$_REQUEST['name'].就表示要从android里面输入到这里的一个键值对的值,id为name,下面我们写Android程序会再说明一下。
[php]view plaincopyprint?12json_encode($output));这个就是把输出的结果转成json的数据格式返回给Android进行json数据解析。
二、准备写Android关键的实现连接Mysql方法[java]view plaincopyprint?13//连接MYSQL数据库方法14 //并且返回结果15private String checkServerDataByName()16 {17 //数据流18 InputStream is = null;1920 //返回值21 String result = "";22 String returnResult ="";23 //这里增加要传送到PHP进行MYSQL操作的名称条件24 ArrayList<NameValuePair> nameValuePair = newArrayList<NameValuePair>();25 nameValuePair.add(new BasicNameValuePair("name", mInputName));2627 //Http post28try {29 /*创建一个HttpClient的一个对象*/30 HttpClient httpClient = new DefaultHttpClient();31 /*创建一个HttpPost的对象*/32<SPAN style="WHITE-SPACE: pre"> </SPAN>//MYSQL_0代表我上传的上面写得PHP 文件服务器地址33 HttpPost httpPost = new HttpPost(MYSQL_0);34 /*设置请求的数据*/35 httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair));36 /*创建HttpResponse对象,处理请求*/37 HttpResponse response = httpClient.execute(httpPost);38 /*获取这次回应的消息实体,获取返回的实体消息*/39 HttpEntity entity = response.getEntity();40 /*把这些消息指向对象实体的数据流*/41 is = entity.getContent();42 } catch (Exception e) {43 // TODO Auto-generated catch block44 Log.e("log_tag", "Error in http connection "+e.toString());45 }4647 //接下来对上面能够获取返回的IS数据流进行相关处理48<SPAN style="WHITE-SPACE: pre"> </SPAN>//这里不懂的可以先看看JAVA里面的IO流49try {50 BufferedReader br = new BufferedReader(new InputStreamReader(is,51 "iso-8859-1"), 8);52 StringBuilder sb = new StringBuilder();53 String line = null;54while ((line = br.readLine()) != null) {55 sb.append(line + "\n");56 }57 is.close(); //读完记得一定要关闭,其实这个应该放到finally块里面,这里偷懒了58 result = sb.toString();59 } catch (Exception e) {60 // TODO: handle exception61 Log.e("log_tag", "Error converting result "+e.toString());62 }6364try {65 //转换为json data类型66 JSONArray jArray = new JSONArray(result);67if (jArray.length() > 0) {68for (int i = 0; i < jArray.length(); i++) {69 JSONObject json_data = jArray.getJSONObject(i);70 //通过返回的json储存的搜索过得mysql列表值进行获取71 returnResult = "Your Id = " + json_data.getInt("uID");72 }73 } else {74 returnResult = "Can't find Your name!";75 }76 } catch (Exception e) {77 // TODO: handle exception78 Log.e("log_tag", "Error parsing data "+e.toString());79 }8081return returnResult;82 }以上补充说明:[java]view plaincopyprint?83ArrayList<NameValuePair> nameValuePair = new ArrayList<NameValuePair>();84 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,这里用[java]view plaincopyprint?85JSONArray jArray = new JSONArray(result);那么我们就可以直接jArray长度看有返回多少个搜索完后的Mysql表行[java]view plaincopyprint?86JSONObject json_data = jArray.getJSONObject(i);如果存在这些表行值,那么把它们一个一个获取出来,转化成JSONObject对象,就相当于一行MYSQL结果一个Object的形式,方便用getInt或者getString 通过相应的列名进行获取结果。
三、上面其实操作已经完成了,下面修改一下Android的manifest文件进行入网许可[html]view plaincopyprint?87<manifest xmlns:android="/apk/res/android"88 package="chiuan.android"89 android:versionCode="1"90 android:versionName="1.0" >9192<uses-sdk android:minSdkVersion="10" />9394<application95 android:icon="@drawable/ic_launcher"96 android:label="@string/app_name" >97<activity98 android:label="@string/app_name"99 android:name=".HelloChiuanActivity" >100<intent-filter>101<action android:name="android.intent.action.MAIN" />102103<category android:name="UNCHER" /> 104</intent-filter>105</activity>106<activity107 android:label="@string/outPutScreen"108 android:name=".OutPutActivity"109></activity>110</application>111<SPAN style="COLOR: #ff6666"><uses-permissionandroid:name="android.permission.INTERNET"/></SPAN>112</manifest><uses-permission android:name="android.permission.INTERNET"/>上面的文件是我的,就是粉红色那句,加上运行看看结果吧!祝大家成功! 我的结果:在PHP语言中使用JSON发布时间:2012-11-05 20:43目前,JSON已经成为最流行的数据交换格式之一,各大网站的API几乎都支持它。