2 回答
TA贡献1872条经验 获得超3个赞
您分享的两个片段都是错误的。
在第一个片段中,您执行了一个查询(顺便说一句,由于字符串连接,该查询容易受到 SQL 注入的攻击),但忽略其结果并仅检查作为参数传递的对象。
在第二个片段中,您再次执行查询,但忽略结果,从数据库中获取所有用户,并检查他们是否存在。
相反,您需要根据传递的参数进行查询,并检查查询是否返回了任何结果:
@Override
public ApiResponseDto getlogin(UserDto usersLogin) {
try {
// Assumption: The connection is pooled, and doesn't require closing.
Connection con = getConnection();
try (Preparestament ps = con.preparestament("select * from tableregister where username = ? and password = ?") {
ps.setString(1, usersLogin.getUsername());
ps.setString(2, userLoging.getPassword());
try (ResultSet rs = ps.executeQuery()) {
if (rs.next()) {
return new ApiResponseDto("Success", "Login Success");
} else {
ApiResponseDto obj = new ApiResponseDto("Error", "Error Login");
obj.setErrorCode(1);
return obj;
}
}
}
} catch (Exception e) {
e.printStackTrace(); // Or log the error somehow
return new ApiResponseDto("Error", "Error: " + e.toString());
}
}
PS:
请注意,在您的两个代码段中,您都没有正确关闭 JDBC 对象,从而导致泄漏。这可以使用 try-with-resource 语法相对巧妙地完成。
TA贡献1828条经验 获得超13个赞
您需要检查结果集。您可以这样做。
ResutSet rs = st.executeQuery....
if(rs.next()) {
String username = r.getUserName();
...
}
添加回答
举报