这个方法是参考http://www./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']."'");
这句当中
就表示要从android里面输入到这里的一个键值对的值,id为name,下面我们写Android程序会再说明一下。
这个就是把输出的结果转成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的对象*/
- <span style="white-space: pre; "> </span>//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数据流进行相关处理
- <span style="white-space: pre; "> </span>//这里不懂的可以先看看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./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>
- <span style="color:#FF6666;"><uses-permission android:name="android.permission.INTERNET"/></span>
- </manifest>
上面的文件是我的,就是粉红色那句,加上运行看看结果吧!祝大家成功!
我的结果: