Android通过php连接百度云数据库

要想通过Android程序直接连接百度云数据库是不行的,必须通过php来进行连接。

 

要用php对百度云数据库进行操作的话,都要先通过php文件连接到百度云,连接云数据库的php文件名是conn,内容如下:

 

<?php
//echo "这是php数据库访问层!";
$dbhost = "sqld.duapp.com:4050"; 
$dbuser = ""; //我的用户名 
$dbpass = ""; //我的密码 
$dbname = ""; //我的mysql库名 
$cn = mysql_connect($dbhost,$dbuser,$dbpass) or die("connect 

error");
@mysql_select_db($dbname)or die("db error");
mysql_query("set names 'UTF8'");
mysql_query("set character_set_client=utf8");  
mysql_query("set character_set_results=utf8");
?>

 

 

 

用户登录:

php文件,其中User表是在百度云数据库中创建的。

 

<?php
include ("conn.php");
$id=str_replace(" ","",$_POST['id']);//id为登录账号
$pwd=str_replace(" ","",$_POST['pwd']);//pwe为登录密码
$sql="select * from User where Uid='$id' and pwd='$pwd'";
$query=mysql_query($sql);
$rs = mysql_fetch_array($query);

if(is_array($rs)){
	echo 'OK';
}else echo 'illegal user';

?>


Android程序中需要传入账号和密码并且账号和密码都要与php中的一致都是id和pwd。

ArrayList<BasicNameValuePair> list=new ArrayList<BasicNameValuePair>();
		list.add(new BasicNameValuePair("id", et_accounts.getText().toString()));
		list.add(new BasicNameValuePair("pwd", et_password.getText().toString()));
		String flag=CloudConnection.gotoLogin(loginuri, list);

 

如果登录成功那么flag的值为‘OK’,否则flag为'illegal user'。

这个是CloudConnection类:

 

@SuppressWarnings("deprecation")
public class CloudConnection {
	public static String gotoLogin(String connectUrl,List<BasicNameValuePair>list) {
		String result = "";
		HttpPost httpRequest = new HttpPost(connectUrl);
		//Post运作传送变数必须用NameValuePair[]阵列储存
		try{
			//发出HTTP请求
			httpRequest.setEntity(new UrlEncodedFormEntity(list,HTTP.UTF_8));
			//取得HTTP response
			HttpResponse httpResponse=new DefaultHttpClient().execute(httpRequest);
			//若状态码为200则请求成功,取到返回数据
			if(httpResponse.getStatusLine().getStatusCode()==200){
				//取出字符串
				result=EntityUtils.toString(httpResponse.getEntity(),"UTF-8");
				System.out.println("result= "+result);
			}
			else System.out.println("StatusCode=="+httpResponse.getStatusLine().getStatusCode());
		}catch(Exception e){
			e.printStackTrace();
		}
		return result;
	}
}

 

 

 

 

 

 

 

多条查询,例如从云数据库中查找表中所有的微博,表的字段为:

Mbid:微博id

Mbuid:发表此微博的用户id

Mbcontent:微博内容

Mbtime:发表微博的时间

Mbnumzan:赞此微博的数目

Mbnumping:评论此微博的数目
picName:发表的图片的名字

那么php文件就是:

 

<?php
include ("conn.php");//连接数据库
$sql="SELECT * FROM  Microblog,User where Microblog.Mbuid=User.Uid";
$rs=mysql_query($sql);

$user = array();
while($row = mysql_fetch_array($rs))
{
	$Mbid = $row['Mbid'];
	$Mbuid = $row['Mbuid'];
	$Mbcontent = $row['Mbcontent'];
	$Mbtime=$row['Mbtime'];
	$Mbnumzan = $row['Mbnumzan'];
	$Mbnumping = $row['Mbnumping'];
	$nickname = $row['nickname'];
	$iName = $row['iName'];
	$picName = $row['picName'];
	$ary = array(
            		Mbid => $Mbid ,
			Mbuid => $Mbuid,
			Mbcontent =>$Mbcontent,
			Mbtime => $Mbtime,
			Mbnumzan => $Mbnumzan,
			Mbnumping => $Mbnumping,
			nickname=> $nickname,
			iName=>$iName,
			picName=>$picName
	);
	array_push($user,$ary);
}

$users['Microblog']=$user;
echo json_encode($users);
?>

 

 

 

因为php返回的是一个对象数组,所以要对php中从云数据库获得的数据进行解析,解析之后的数据存在list中。

 

public class Microblog_DB {

	String sendUri="https://oursvn.duapp.com/query_microblog.php";//sendUri为你php文件的路径
	public List<Map<String, Object>> getData() {
		List<Map<String, Object>> list=new ArrayList<Map<String,Object>>();
		StringBuilder builder = new StringBuilder();
		HttpPost httpRequest = new HttpPost(sendUri);

		try{
			HttpResponse httpResponse=new DefaultHttpClient().execute(httpRequest);//发出HTTP请求,取得HTTP 

			//若状态码为200则请求成功,取到返回数据
			BufferedReader reader = new BufferedReader(new InputStreamReader(
					httpResponse.getEntity().getContent()));

			for (String s = reader.readLine(); s != null; s = reader.readLine()) {
				builder.append(s);
			}
			String jsonString = builder.toString();
			jsonString = jsonString.substring(jsonString.indexOf("{"),jsonString.lastIndexOf("}")+1);
			JSONObject jsonObject = new JSONObject(jsonString);
			JSONArray jsonArray = jsonObject.getJSONArray("Microblog");//Microblog要与php中$users['Microblog']=$user的Microblog名称一致


			for(int i=0;i<jsonArray.length();i++){

				JSONObject jsonObject1 =(JSONObject) jsonArray.get(i);
				int Mbid= jsonObject1.getInt("Mbid");
				String Mbuid= jsonObject1.getString("Mbuid");
				String Mbcontent= jsonObject1.getString("Mbcontent");
				String Mbtime= jsonObject1.getString("Mbtime").toString().substring(5, 16);
				String Mbnumzan= jsonObject1.getString("Mbnumzan");
				String Mbnumping= jsonObject1.getString("Mbnumping");
				String nickname=jsonObject1.getString("nickname");
				String iName=jsonObject1.getString("iName");//头像名称
				String picName=jsonObject1.getString("picName");//图片名称
				Map<String, Object>map = new HashMap<String, Object>();
				map.put("zan",R.drawable.zan);
				map.put("ping",R.drawable.ping);
				map.put("head",R.drawable.tou12 );
				map.put("nickname", nickname);
				map.put("content", Mbcontent);
				map.put("sendtime", Mbtime);
				map.put("zannum", Mbnumzan);
				map.put("pingnum", Mbnumping);
				map.put("mbid", String.valueOf(Mbid));
				list.add(map);
			}

		}catch(Exception e){
			e.printStackTrace();
		}
		return list;
	}
}

 

 

如果是一条查询而不是多条查询,那么可以也可以利用多条查询的方法来实现,只不过for循环的时候只循环一次罢了。
 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值