2 回答

TA貢獻(xiàn)1872條經(jīng)驗(yàn) 獲得超4個(gè)贊
您分享的兩個(gè)片段都是錯(cuò)誤的。
在第一個(gè)片段中,您執(zhí)行了一個(gè)查詢(順便說(shuō)一句,由于字符串連接,該查詢?nèi)菀资艿?SQL 注入的攻擊),但忽略其結(jié)果并僅檢查作為參數(shù)傳遞的對(duì)象。
在第二個(gè)片段中,您再次執(zhí)行查詢,但忽略結(jié)果,從數(shù)據(jù)庫(kù)中獲取所有用戶,并檢查他們是否存在。
相反,您需要根據(jù)傳遞的參數(shù)進(jìn)行查詢,并檢查查詢是否返回了任何結(jié)果:
@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:
請(qǐng)注意,在您的兩個(gè)代碼段中,您都沒(méi)有正確關(guān)閉 JDBC 對(duì)象,從而導(dǎo)致泄漏。這可以使用 try-with-resource 語(yǔ)法相對(duì)巧妙地完成。

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超13個(gè)贊
您需要檢查結(jié)果集。您可以這樣做。
ResutSet rs = st.executeQuery....
if(rs.next()) {
String username = r.getUserName();
...
}
添加回答
舉報(bào)