Java 为什么用户名和密码返回空值?

Java 为什么用户名和密码返回空值?,java,Java,因此,我使用Java持久性编写了用户名和密码验证代码 public Subscriber validateLogin(String username, String password) { EntityManager em = getEntityManager(); Query q = em.createQuery("SELECT s FROM Subscriber s WHERE s.username = :username OR s.password = :password

因此,我使用Java持久性编写了用户名和密码验证代码

public Subscriber validateLogin(String username, String password)
{
   EntityManager em = getEntityManager();

    Query q = em.createQuery("SELECT s FROM Subscriber s WHERE s.username = :username OR s.password = :password ");

    q.setParameter("username", username);
    q.setParameter("password", password);

    try
    {
        return (Subscriber) q.getSingleResult();
    }
    catch (Exception e)
    {
        return null;
    }
}
因此,我检查订户是否返回任何内容或
null
。这是我的密码:

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt)
{
    // TODO add your handling code here:
    SubscriberJpaController sjc = new SubscriberJpaController();
    Subscriber sub = sjc.validateLogin(jTextField1.getText(), jPasswordField1.getText());

    System.out.println(sub);
}

它返回
null
。我的代码或逻辑有问题吗?

您应该永远不要查询密码

要运行的查询如下所示:

m.createQuery(“从订阅服务器s中选择s,其中s.username=:username”)


收到用户后,请在代码中检查密码的有效性。这一点尤其重要,因为您显然正在对密码进行哈希运算。对吗?

您应该永远不要查询密码

要运行的查询如下所示:

m.createQuery(“从订阅服务器s中选择s,其中s.username=:username”)


收到用户后,请在代码中检查密码的有效性。这一点尤其重要,因为您显然正在对密码进行哈希运算。对吗?

执行查询时可能会引发异常。您必须打印stacktrace以查看原因

我猜(不确定)问题可能出在
q.getSingleResult()行如果其他配置设置正确

Jpa期待着一个独特的结果。但是,您的查询可以通过用户名=…生成一组订阅者密码=。。。。e、 g

user a(uname,pwd)= ("usera","123")
user b(uname,pwd)= ("userb","123")
因此方法getSingleResult()抛出异常


也可以考虑使用泛型的JPA TyPyQuess代替手工实现类。

< P>在查询时可能会抛出异常。您必须打印stacktrace以查看原因

我猜(不确定)问题可能出在
q.getSingleResult()行如果其他配置设置正确

Jpa期待着一个独特的结果。但是,您的查询可以通过用户名=…生成一组订阅者密码=。。。。e、 g

user a(uname,pwd)= ("usera","123")
user b(uname,pwd)= ("userb","123")
因此方法getSingleResult()抛出异常


也可以考虑使用泛型的JPA TyPyQuess代替手工进行类的绘制。

在catch块中返回null之前打印StTrA迹。我能看到的唯一问题是<代码> S.UrNeNe=:用户名或S.Posith=:密码< /代码>。这不应该是“和”吗?否则,如果有人密码错误,他们仍将登录到.iuse,并且仍然为空。我的订户类是一个抽象类。这个有问题吗?在catch块中返回null之前打印stacktrace。我能看到的唯一问题是
s.username=:username或s.password=:password
。这不应该是“和”吗?否则,如果有人密码错误,他们仍将登录到.iuse,并且仍然为空。我的订户类是一个抽象类。这个有什么问题吗?你怎么知道OP“显然”加密了密码?@Kent Mark的意思是,并没有假设OP加密了密码。@Mark我按照你的建议做了。设置您的JPQL环境以打印出它发出的SQL语句。然后检查以确保数据确实存在。你怎么知道OP“显然”加密了pwd?@Kent Mark提出了一个观点,并没有假设OP加密了密码。@Mark我按照你的建议做了。设置您的JPQL环境以打印出它发出的SQL语句。然后检查以确保数据确实存在。是的,问题在于q.GetSingleResult()是否应该是q.getResultList()?是的,问题在于q.GetSingleResult()是否应该是q.getResultList()?