分享

Android 连接Mysql进行相关操作

 quasiceo 2014-10-21
分类: Android网络研究 Android代码研究 2011-11-20 10:53 6260人阅读 评论(6) 收藏 举报

这个方法是参考http://www./networking-database-problems-f29/connecting-to-mysql-database-t50063.html 国外老外的一些经验所得。这里我总结一下要点:

1、需要一个mysql数据库,这个怎么搞出来,大家觉得有问题先学学mysql再回来接着看。
2、需要一个php操作mysql数据库的脚本,上传到服务器地址
3、需要修改Android的manifest文件,入网许可!!

一、首先我们假如已经把MYSQL数据库建立好了,写一个PHP操作文件上传到服务器访问地址

  1. <?php  
  2.     mysql_connect("localhost","yourName","yourPassword");  
  3.     mysql_select_db("yourDB");  
  4.     $q=mysql_query("SELECT * FROM user_info WHERE uName ='".$_REQUEST['name']."'");  
  5.     while($e=mysql_fetch_assoc($q))  
  6.             $output[]=$e;  
  7.         print(json_encode($output));  
  8.     mysql_close();  
  9. ?>  
稍微解析一下上面PHP内容,

  1. $q=mysql_query("SELECT * FROM user_info WHERE uName ='".$_REQUEST['name']."'");  

这句当中

  1. .$_REQUEST['name'].  

就表示要从android里面输入到这里的一个键值对的值,id为name,下面我们写Android程序会再说明一下。

  1. json_encode($output));  

这个就是把输出的结果转成json的数据格式返回给Android进行json数据解析。

二、准备写Android关键的实现连接Mysql方法

  1. //连接MYSQL数据库方法  
  2.     //并且返回结果  
  3.     private String checkServerDataByName()  
  4.     {  
  5.         //数据流  
  6.         InputStream is = null;  
  7.           
  8.         //返回值  
  9.         String result = "";  
  10.         String returnResult ="";  
  11.         //这里增加要传送到PHP进行MYSQL操作的名称条件  
  12.         ArrayList<NameValuePair> nameValuePair = new ArrayList<NameValuePair>();  
  13.         nameValuePair.add(new BasicNameValuePair("name", mInputName));  
  14.           
  15.         //Http post  
  16.         try {  
  17.             /*创建一个HttpClient的一个对象*/  
  18.             HttpClient httpClient = new DefaultHttpClient();  
  19.             /*创建一个HttpPost的对象*/  
  20. <span style="white-space: pre; ">           </span>//MYSQL_0代表我上传的上面写得PHP文件服务器地址  
  21.             HttpPost httpPost = new HttpPost(MYSQL_0);  
  22.              /*设置请求的数据*/  
  23.             httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair));  
  24.              /*创建HttpResponse对象,处理请求*/  
  25.             HttpResponse response = httpClient.execute(httpPost);  
  26.             /*获取这次回应的消息实体,获取返回的实体消息*/  
  27.             HttpEntity entity = response.getEntity();  
  28.             /*把这些消息指向对象实体的数据流*/  
  29.             is = entity.getContent();  
  30.         } catch (Exception e) {  
  31.             // TODO Auto-generated catch block  
  32.             Log.e("log_tag""Error in http connection "+e.toString());  
  33.         }   
  34.           
  35.         //接下来对上面能够获取返回的IS数据流进行相关处理  
  36. <span style="white-space: pre; ">       </span>//这里不懂的可以先看看JAVA里面的IO流  
  37.         try {  
  38.             BufferedReader br = new BufferedReader(new InputStreamReader(is,  
  39.                     "iso-8859-1"), 8);  
  40.             StringBuilder sb = new StringBuilder();  
  41.             String line = null;  
  42.             while ((line = br.readLine()) != null) {  
  43.                 sb.append(line + "\n");  
  44.             }  
  45.             is.close(); //读完记得一定要关闭,其实这个应该放到finally块里面,这里偷懒了  
  46.             result = sb.toString();  
  47.         } catch (Exception e) {  
  48.             // TODO: handle exception  
  49.             Log.e("log_tag""Error converting result "+e.toString());  
  50.         }  
  51.           
  52.         try {  
  53.             //转换为json data类型  
  54.             JSONArray jArray = new JSONArray(result);  
  55.             if (jArray.length() > 0) {  
  56.                 for (int i = 0; i < jArray.length(); i++) {  
  57.                     JSONObject json_data = jArray.getJSONObject(i);  
  58.                     //通过返回的json储存的搜索过得mysql列表值进行获取  
  59.                     returnResult = "Your Id = " + json_data.getInt("uID");  
  60.                 }  
  61.             } else {  
  62.                 returnResult = "Can't find Your name!";  
  63.             }  
  64.         } catch (Exception e) {  
  65.             // TODO: handle exception  
  66.             Log.e("log_tag""Error parsing data "+e.toString());  
  67.         }  
  68.           
  69.         return returnResult;  
  70.     }  

以上补充说明:

  1. ArrayList<NameValuePair> nameValuePair = new ArrayList<NameValuePair>();  
  2.         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,这里用

  1. JSONArray jArray = new JSONArray(result);  

那么我们就可以直接jArray长度看有返回多少个搜索完后的Mysql表行

  1. JSONObject json_data = jArray.getJSONObject(i);  

如果存在这些表行值,那么把它们一个一个获取出来,转化成JSONObject对象,就相当于一行MYSQL结果一个Object的形式,方便用getInt或者getString通过相应的列名进行获取结果。

三、上面其实操作已经完成了,下面修改一下Android的manifest文件进行入网许可

  1. <manifest xmlns:android="http://schemas./apk/res/android"  
  2.     package="chiuan.android"  
  3.     android:versionCode="1"  
  4.     android:versionName="1.0" >  
  5.   
  6.     <uses-sdk android:minSdkVersion="10" />  
  7.   
  8.     <application  
  9.         android:icon="@drawable/ic_launcher"  
  10.         android:label="@string/app_name" >  
  11.         <activity  
  12.             android:label="@string/app_name"  
  13.             android:name=".HelloChiuanActivity" >  
  14.             <intent-filter >  
  15.                 <action android:name="android.intent.action.MAIN" />  
  16.   
  17.                 <category android:name="android.intent.category.LAUNCHER" />  
  18.             </intent-filter>  
  19.         </activity>  
  20.         <activity   
  21.             android:label="@string/outPutScreen"  
  22.             android:name=".OutPutActivity"  
  23.             ></activity>  
  24.     </application>  
  25.     <span style="color:#FF6666;"><uses-permission android:name="android.permission.INTERNET"/></span>  
  26. </manifest>  

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


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多