最近一直做一个关于"点赞"功能的服务器端(整个服务器功能的一个小部分),基本的需求主要是这样的:
用户发表了一个状态,浏览者可以点赞,但是点赞只能点一次.如果浏览者点了第二次,客户端就说"您已经点过一次赞了哟".
mysql的sql语句是这样做的:
create table status_footprint_db(
sid int unsigned not null,
uid int unsigned not null,
like_this varchar(1) check ( like_this in('0','1')),
primary key(aid,uid,like_this),
foreign key(sid) references status_db(sid) on delete cascade on update cascade
);
现在问题来了.如何做到判断用户是否点赞呢?
有两种做法,第一种做法是在用户点赞的时候,先查询一下,如果说点过赞了,就直接返回.如果说没有点赞,就插入点赞.
第二种做法是直接插入,因为向上面的数据库表,元组是不允许一样的,这样在插入数据,如果已经点赞了.mysql就会不允许插入.excuteupdate就会返回0,这样就表示已经点过赞了.
其实我更想说的是第二种情况所引申出来的情况.excuteupdate等于0可能是多种情况,不一定"我已经点过赞"的原因.也有可能是like_this不是0或者1.这样,本来我没有点赞,但是客户端还是告诉我"您已经点过赞了".有没有这样一种方法:
根据具体的异常来返回给客户端不同的值?
比如陌陌就经常出现这种情况:更新个人资料的时候,有时候是更新成功了的.但是客户端还是给你说:更新失败,请检查连接.
接着陌陌的问题.假设用户在更新数据的时候,服务器出于某种原因,会报出两个异常:
一个是sql异常.说明数据库中间没有插入你的数据,客户端说"数据插入失败,重试一下".
另外一个是其他的一个异常,但是数据库中间已经保存了你的数据.,客户端说"服务器发生未知错误,但是您的数据已经更新成功"
对于点赞的问题:根据不同的异常返回两个值:
1.您已经点过赞了
2.点赞失败..服务器出现了某种错误.
以前我处理异常就是try catch throw finally,只要出现异常,就给客户端返回"一个服务器错误"的提示.客户端发现有这句话"就提醒"更新失败,请重试".于是用户们就重试了一下.结果就出现跟陌陌差不多的错误,数据库更新成功了.由于用户不断重试,表里面有很多重复的数据.
还是老问题啊!这么多异常,如和根据异常向客户端返回不同的值呢?是不是getCause.equals什么异常么?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。