gpt4 book ai didi

java - 为什么我无法从查询中获取结果列表?

转载 作者:行者123 更新时间:2023-12-02 08:19:11 24 4
gpt4 key购买 nike

我只想在用户的帐户被激活时登录用户,但由于某种原因,当给出正确的凭据时,应该返回用户(我在程序中称之为角色)的查询根本不会检索任何内容。

我 100% 确信凭据是正确的,而且我确信数据库中没有重复项并且查询语法是正确的。

那么为什么我的一个 EJB 中的这个方法没有返回 true?:

// Checks if the account is not activated!
public boolean isActivated(String email, String password) {
// 1-Send query to database to see if that user exist
Query query = em
.createQuery("SELECT r FROM Role r WHERE r.email=:emailparam AND r.password=:passwordparam");
query.setParameter("emailparam", email);
query.setParameter("passwordparam", password);

List<Object> tmpList = query.getResultList();
if (tmpList.isEmpty() == false) {
System.out.println("IS NOT EMPTY");
Role role = (Role) tmpList.get(0);
if (role.getAccountStatus().trim()
.equalsIgnoreCase(AccountStattus.ACTIVATED.toString())) {
// The account is activated!
System.out.println("ACTIVATED!!!!!!!");
return true;
}
}
// The account is not activated!
System.out.println("NOT ACTIVATED!!!!!!!");
return false;
}

我在控制台中看到的唯一消息是未激活!!!

更新

为了确认列表 100% 为空,我将代码修改为如下所示:

// Checks if the account is not activated!
public boolean isActivated(String email, String password) {
// 1-Send query to database to see if that user exist
System.out.println("HERE:" + email+password);
Query query = em
.createQuery("SELECT r FROM Role r WHERE r.email=:emailparam AND r.password=:passwordparam");
query.setParameter("emailparam", email);
query.setParameter("passwordparam", password);

List<Object> tmpList = query.getResultList();
Iterator<Object> it = tmpList.iterator();
int elements = 0;
while(it.hasNext()) {
elements++;
}


if (elements > 0) {
System.out.println("IS NOT EMPTY");
Role role = (Role) tmpList.get(0);
if (role.getAccountStatus().trim()
.equalsIgnoreCase(AccountStattus.ACTIVATED.toString())) {
// The account is activated!
System.out.println("ACTIVATED!!!!!!!");
return true;
}
}
// The account is not activated!
System.out.println("NOT ACTIVATED!!!!!!!");
return false;
}

当我输入正确的凭据时,该方法仍然返回 false。怎么了?

最佳答案

调试步骤,

  1. 使用任何 SQL 客户端运行相同的查询
  2. 检查您的Role 类。它必须具有 emailpassword 属性以及适当的 getters/setters

请不要告诉我数据库中的密码是散列版本

一些基本的重构建议,

  1. 以这种方式编写您的查询,以便于查看,

    Query query = em.createQuery("from Role r where r.email=:email and r.password=:password")
    .setParameter("email", email)
    .setParameter("password", password);
  2. 将您的条件更改为此,

    if (!list.isEmpty()) {...}

关于java - 为什么我无法从查询中获取结果列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5788367/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com