JDBC-SQL异常-用尽的结果集[重复]

Posted

技术标签:

【中文标题】JDBC-SQL异常-用尽的结果集[重复]【英文标题】:JDBC-SQL exception-Exhausted resultset [duplicate] 【发布时间】:2018-10-28 12:22:47 【问题描述】:

我正在尝试编写一个使用 JDBC 进行身份验证的函数。我的函数是

 boolean authenticate(String enteredPassword)throws SQLException
        String query="select password from Manager where email=?";
        PreparedStatement stmt=con.prepareStatement(query);
        stmt.setString(1,"ivedantlodha@gmail.com");
        ResultSet rs=stmt.executeQuery();
        rs.next();
        String password=rs.getString(1);
        if(enteredPassword.equals(password))
            return true;
        return false;

    

函数抛出 SQLException Exhausted ResultSet。 rs.next() 的输出为假。在 sql 上执行以下查询时加上 using 语句

select password from Manager where email='ivedantlodha@gmail.com'

我得到一个有效的输出。 这是desc Manager的输出

 Name                      Null?    Type
 ----------------------------------------- -------- 
 NAME                           VARCHAR2(20)
 MANAGER_ID                     NUMBER(38)
 EMAIL                          VARCHAR2(50)
 PASSWORD                       VARCHAR2(30)

【问题讨论】:

问题更多是关于查询select password from Manager where email='ivedantlodha@gmail.com'是否为空...您应该检查电子邮件是否与任何数据匹配 既然您可以在 SQL*Plus 中成功查询相同的值,您是否在同一会话中插入该行并查询,而不提交?如果是这样,那么来自 Java 的另一个会话将无法看到该新行。 (以及 Eran 所说的……) @AlexPoole 谢谢。我不知道如果不提交它将无法工作。问题已解决。 【参考方案1】:

您似乎忽略了rs.next() 的值。你应该这样写:

ResultSet rs=stmt.executeQuery();
if (rs.next()) 
    String password=rs.getString(1);
    if(enteredPassword.equals(password)) 
        return true;
    

return false;

也许您的Manager 表中没有包含“ivedantlodha@gmail.com”的email 的行。

【讨论】:

以上是关于JDBC-SQL异常-用尽的结果集[重复]的主要内容,如果未能解决你的问题,请参考以下文章

SQLException:用尽的结果集

结果集sqlite的Java空指针异常[重复]

结果集sqlite的Java Null指针异常[重复]

对空结果集的非法操作[重复]

ResultSet 异常 - 在结果集开始之前

异常结果集耗尽一次又一次发生