经过后端的辛勤努力,我们终于实现了以上图的内容
测试安排
因为安卓队还不能将读取到的JSON对象写到安卓界面
测试主要是后端的同学来测试,由其他同学提出测试样例
测试工具选择和运用
主要用我们写的软件,发送JSON对象给JDBC进行操作
但是在进行连接前要进行用户验证
如果验证失败无法进行登录
接下来将用简单的套接口软件进行测试展示
登录
登陆成功返回用户ID,学号,头像等信息,才可以进行下一步操作
接下来的操作,将采用JSON格式进行发送命令
为此,我们制定了JDBC的语言风格
requests是安卓发给JDBC的数据,commands是JDBC转给数据库的语言
requests[0]="@getMasterpage";
commands[0]="select * from masterpage limit ?,?"; //两参数,建议0,10
requests[1]="@searchUserName";
commands[1]="select * from User where UserName like ? limit ?,?";//三参数,建议0,20
requests[2]="@searchUserID";
commands[2]="select * from User where UserID=?";//一参数
requests[3]="@searchPostContent";
commands[3]="select * from masterpage where PostContent like ? order by PostTime desc limit ?,?";//三参数,建议0,10
requests[4]="@searchTagName";
commands[4]="select distinct * from Tag where TagName like ? limit ?,?";//三参数,其中1为%内容%,2,3建议0,20
requests[5]="@searchTagID";
commands[5]="select distinct * from Tag where TagID =?";//一参 ID值
requests[6]="@searchTagSequenceID";
commands[6]="select * from Tag where TagSequenceID=?";//一参 ID值
requests[7]="@searchPersonalTag";
commands[7]="select * from PersonalTag where UserID = ? order by OrderNumber";//一参 ID值
requests[8]="@getPost";
commands[8]="select * from masterpage where PostID=?";//点击动态
requests[9]="@searchPostByTag";
commands[9]="SELECT DISTINCT u.UserName,u.UserPictureURL,u.UserID,\n" +
"t.TagTruth,p.PostID,p.PostTime,p.PostContent,p.PicturesURL,\n" +
"p.LikeNumber,p.CollectNumber,p.CommentNumber\n" +
"FROM Post AS p ,Tag AS t,User AS u\n" +
"WHERE u.UserID=p.UserID AND p.TagMark=t.TagID AND\n" +
"u.UserID IN (SELECT uu.UserID\n" +
"FROM Post AS pp ,Tag AS tt,User AS uu\n" +
"WHERE uu.UserID=pp.UserID AND pp.TagMark=tt.TagID AND uu.UserID<>?\n" +
"AND tt.TagID IN (SELECT TagID\n" +
"FROM PersonalTag\n" +
"WHERE PersonalTag.UserID=?\n" +
")\n" +
")";
封装样式
JSONObject jsonObject=new JSONObject();
jsonObject.put("request","@searchUserID");//命令名称
jsonObject.put("parameter",1);//参数个数
jsonObject.put(0,1);//第0个参数,学号为1
String sql=jsonObject.toString();//直接发送给服务器
0.0.3版本模糊查询需要在发送端加上通配符 “%”+content+“%”
其中以requests[0]为举例,安卓端发送
{"request":"@getMasterpage","parameter":2,"0":0,"1":10}
在JDBC里将转化为以下语言给数据库
select * from masterpage limit 0,10
masterpage是数据库的视图,这句话实际上等同于
select distinct u.UserName,u.UserPictureURL,u.UserID,t.TagTruth,p.PostID,p.PostTime,p.PostContent,p.PicturesURL,p.LikeNumber,p.CollectNumber,p.CommentNumber
from Post as p ,Tag as t,User as u where u.UserID=p.UserID and p.TagMark=t.TagID order by p.PostTime desc;
得到的结果如下
即获取了所有的动态内容
同好动态
用到了requests[9]命令
为了更好展示我们举个例子
尚佳同学的用户ID是3
他对1010010000和1010020000的标签感兴趣
TagMark是显示在个人空间里的标签备注,所以不会显示在“同好动态”里
这是所有的动态,第一四条为1010010000标签相关动态,第二条是1010020000标签相关动态
即要查出三条结果
如果如果用SQL语句来写出这段话的话,即为
/*同好圈(返回拥有相同爱好标签的所有动态)*/
/*@UserID(用户ID变量)*/
SELECT DISTINCT u.UserName,u.UserPictureURL,u.UserID,
t.TagTruth,p.PostID,p.PostTime,p.PostContent,p.PicturesURL,
p.LikeNumber,p.CollectNumber,p.CommentNumber
FROM Post AS p ,Tag AS t,User AS u
WHERE u.UserID=p.UserID AND p.TagMark=t.TagID AND
u.UserID IN (SELECT uu.UserID
FROM Post AS pp ,Tag AS tt,User AS uu
WHERE uu.UserID=pp.UserID AND pp.TagMark=tt.TagID AND uu.UserID<>3
AND tt.TagID IN (SELECT TagID
FROM PersonalTag
WHERE PersonalTag.UserID=3
)
);
最后我们用JDBC和JSON整合了一下,只需要一句话就可以表达上面的内容
{"request":"@searchPostByTag","parameter":1,"0":3}
返回的结果因为安卓还未做出界面来,所以先用IDEA展示
查找用户
用request[1]来查找名字带“莫”的人
{"request":"@searchUserName","parameter":3,"0":'%莫%',"1":0,"2":10}
查找标签
我们如何解决近义标签问题?
标签里有近义词,我们通过返回TagTruth来将最终的规范统一
比如“吃饭”和“美食”他们最终都需要返回“美食”
我们在表中建立这两个值
尽管他们的名字不一样,但是他们的标签ID相同
在输入查找“吃饭”命令的时候,只会返回一次唯一的确定值
{"request":"@searchTagName","parameter":3,"0":'%吃饭%',"1":0,"2":10}
查找用户ID
{"request":"@searchUserID","parameter":1,"0":'3'}
查找相关动态
{"request":"@searchPostContent","parameter":3,"0":'%猫%',"1":0,"2":10}
查找标签ID
{"request":"@searchTagID","parameter":1,"0":'1010010000'}
就可以找到所有的近义词
剩余的内容
剩余的测试内容太多
因为我们的安卓端还无法读取JSON对象
且都是那个套接字软件,没啥可以展示在界面上的
所以带过一下
requests[6]="@searchTagSequenceID";
commands[6]="select * from Tag where TagSequenceID=?";//一参 ID值
requests[7]="@searchPersonalTag";
commands[7]="select * from PersonalTag where UserID = ? order by OrderNumber";//一参 ID值
requests[8]="@getPost";
commands[8]="select * from masterpage where PostID=?";//点击动态
测试文档链接
因为我们的软件操作太多了
构思也非常复杂
且安卓队还在研究如何将我们的数据搬到界面上
因此还未能拿出文档链接来
在这里深感抱歉
测试体会
用户一个简单的操作就可以在后端进行如此翻天覆地的操作
这段时间真的是辛苦了热情组的同学们
真的是用尽全力完成这个项目了
后端的同学们想尽办法抠细节
实现SQL语言再整合到JDBC里,再整合到服务器上
冲刺前从零开始学起,到现在基本的框架思路都明晰了
进步速度可以说是飞一样的
但这里只是组长的感受而已
期待一下我们组员的冲刺总结感受吧~
感谢你们