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异常-用尽的结果集[重复]的主要内容,如果未能解决你的问题,请参考以下文章