Java 测试对唯一标识符的查询最多返回一个结果
我通过控制与给定电子邮件关联的密码是否正确来验证网站上的登录输入电子邮件和密码。 在数据库中,电子邮件是主键 在java代码中,测试给定电子邮件的查询结果最多只能是一个,这有意义吗?例如,通过测试是否有第二个结果。或者它是无用的,因为一旦正确创建了数据库,这样的错误就不可能发生了Java 测试对唯一标识符的查询最多返回一个结果,java,mysql,sql,jdbc,Java,Mysql,Sql,Jdbc,我通过控制与给定电子邮件关联的密码是否正确来验证网站上的登录输入电子邮件和密码。 在数据库中,电子邮件是主键 在java代码中,测试给定电子邮件的查询结果最多只能是一个,这有意义吗?例如,通过测试是否有第二个结果。或者它是无用的,因为一旦正确创建了数据库,这样的错误就不可能发生了 if(rs.next()) { System.out.println("Something is wrong with the database"); System.exit(1); } 此外,您能否
if(rs.next()) {
System.out.println("Something is wrong with the database");
System.exit(1);
}
此外,您能否评论一下在发生如此大的错误时如何最好地关闭程序?如果电子邮件是主键,则没有理由查看电子邮件是否有多个结果,因为正如您所说,主键是唯一的。所以,不要费心去检查那些不可能发生的事情 如果你想把它放在测试套件中,我看不出有什么害处 如果您担心模式可能出错,您可以编写一个测试来确认电子邮件是主键
但是,为了记录在案,我将使用INT作为主键,并使用email作为唯一键。否则,当你想引用某个地址时,你的系统就会到处都是电子邮件。当用户更改其电子邮件地址时会发生什么情况?这是一种痛苦,还有更多的边缘病例。如果您想对dev db的电子邮件地址进行加扰,会发生什么情况?为了简单起见,我将在这里抓住第一条匹配的记录。当然,您会希望处理没有匹配记录的情况。这听起来像是在数据库中存储明文密码:不要这样做。使用适当的密码哈希算法。@markrottveel是的,我确实是。谢谢你的建议,我会调查的。如果你知道如何做到这一点的指南或教程,请随时告诉我!谢谢你的建议。现在我使用两个表,一个用于登录[emailPK password],另一个表用于存储用户信息[userIDPK name age emailFK]。哪一套桌子最好?我是否应该将所有信息存储在一个表中,并仅将密码保存在一个带有userID的额外表中?下面是一个简单的用户表,可能适合您:Hi@StefanMcl,CREATE table user_id int unsigned not null auto_increment,email varchar255,password_hash varchar255,name varchar255,age int unsigned,UNIQUEemail,PRIMARY KEYuser_id;