简言
还记得第一次实现安卓与数据库的交互是做的登录功能,当时因为PHP好上手而且环境也很好搭,所以后台就用了PHP+MySql,回想已经过了一两年了,当时实现了与服务端数据库的交互的确对自己来说是一个很不错的进步,但直到现在做的东西还是建立在当时的那种交互方式,这就说明了之后本人在安卓与服务端交互这块的学习非常匮乏。此篇是关于课程查询的实现,当然还是用的Android+PHP+MySql来实现。
实现功能
做这个的目的是为了帮助同学完成他们的近期要结题的一个科创项目,正好借此复习之前的一些的知识,以下是他们要实现的功能(时间非常紧急各种投机取巧哈哈):
1.通过课程名或课程号查询课程信息(课程代码,授课老师,上课地点时间,课程介绍)
2.通过课程名查看同上这节课的学生信息(学号,姓名,班级)
3.在 1 的基础上点击教师名称可以查看ta的评价(简单实现只有一条评价)
4.在 2 的基础上可以实现一种简单的交流比如留言发消息这样的(本来想做即时通讯但难度挺大的所以改用了 5 的方式)
5.实现了一个简单的论坛,发表内容并可以@某一楼的人(该功能的实现也是“巧妙”)
6.要有该app发出的通知栏(这个功能原本是要实时监测到课程信息发生变化后通知),点击通知栏会显示全部课程。
以上是全部要实现的功能,下面就开启过程:
数据库的设计
本质来说,这些功能其实就是对数据库中数据的操作,数据库设计不是很规范但都为了功能设计:
1.数据库中第一张表是微论坛数据表,之后的发表内容其实就是往这张表中插入数据,fromwho表示是谁发的,towho就表示这个内容是@了谁,time是发送时间,mseg则是内容
2.第二张表是课程表,查询课程信息 是通过id(课程号)和cname(课程名),tname是授课老师,time是上课时间,site是上课地点
3.第三张表是学生表,这张表主要存储学生的信息,这里简单起见就只有学生编号(id)、姓名(name)、班级(grade)
4.第四张表是学生选课表,就是哪个学生(sname)选了哪个课程(cname)这张表可以和上一张表联系起来,这样就可以在知道课程名的情况下查询到选这门课程的学生信息。
5.最后一张表就是教师评价表,这里只放了每个老师(tname)所对应的一条综合评价(comment)
PHP的代码
后台是利用php和mysql交互,php一句代码就可以直接连接数据库(要不说php上手快),再根据安卓端发来的请求(参数),对数据库进行相应的操作,查询的数据输出json格式给安卓端解析(如图)。
上代码:
1.得到请求的参数(比如搜索的关键词)
$req_type=$_REQUEST['sel_type'];
$req_key=$_REQUEST['sel_key'];
2.连接数据库
$connection =new mysqli("localhost","root","密码","数据库名");
$connection->query("SET NAMES UTF8");
3.查询课程信息
function lessonSel($sql) {
$result=$connection->query($sql);
if($result===FALSE) echo 'fail';
else{
$row=$result->fetch_assoc();
echo json_encode(array("cname"=>$row['cname'],"tname"=>$row['tname'],"site"=>$row['site'],"des"=>$row['desc'],"time"=>$row['time'],"id"=>$row['id']));//编码成json并输出
}
}
(1)lessonSel("select * from lesson where cname like '{$req_key}%' or id='{$req_key}' or tname='{$req_key}');
//like匹配关键词或者通过课程号查询课程信息
(2)lessonSel("select * from lesson");
//查询所有课程信息
4.查询同课的学生信息
function stuSel(){
$sql="select * from student where name in (select sname from stusel where cname like '{$req_key}%' or cname in (select cname from lesson where id='{$req_key}'))";
//利用嵌套查询(结合学生表和学生选课表)通过课程号或课程名的匹配来查询到同课同学
$result=$connection->query($sql);
if($result===FALSE) echo 'fail';
else{
$i=0;
while($row=$result->fetch_assoc()){//关联数组
$arr[$i++]=array("id"=>$row['id'],"name"=>$row['name'],"grade"=>$row['grade']);
}
$arr[$i]=array("id"=>"当前搜索","name"=>"key:$req_key","grade"=>"$i 个同课同学");
echo json_encode($arr);//数组转换为JSON数组字符串
}
}
5.查询老师的评价
function teaCom(){
$sql="select * from teacher where tname='{$req_key}'";
$result=$connection->query($sql);
if($result===FALSE) echo 'fail';//查询失败则输出fail
else{
$row=$result->fetch_assoc();
echo $row['comment'];
}
}
6.论坛数据操作
(1)查询数据
function forumSel(){
$sql="select * f