[英]ExecuteQuery returns null while execute statement returns true
这是我的Java代码,试图从数据库获取ResultSet。
try{
ps=conn.prepareStatement(QueryMapper.SCHEDULE_APPLICANT_STATUS);
ps.setString(1,schedule_id);
rs1=ps.execute();
System.out.println(rs1);
ResultSet rs = null;
while(rs1)
{
rs=ps.executeQuery();
System.out.println(rs.next());
Application applicationBean= new Application();
System.out.println("ABC"+schedule_id);
applicationBean.setScheduledProgramId(rs.getString(3));
applicationBean.setStatus(rs.getString(2));
applicationBean.setApplicantId(rs.getString(1));
applicationList.add(applicationBean);
applicationCount++;
}
}catch (SQLException sqlException) {
log.error(sqlException.getMessage());
System.out.println(sqlException.getMessage());
}
当我尝试运行此命令时,无法使用executeQuery
语句在rs处获取结果集。 当我尝试使用execute
语句execute
它返回true
,这意味着将返回某些结果集。 为什么我的executeQuery
返回null。
我试图运行的SQL查询是
选择*从SCHEDULED_PROGRAM_ID =的应用程序?
在sql管理器中执行时,此查询运行良好并获取结果。
你能告诉我我做错了吗。
在所示的代码中,如果rs1
为false,则rs
只能为null
,这仅在您执行不产生结果集的东西(或者JDBC驱动程序有bug,但可能性较小)时才是这种情况。 。
不过,您正在做的事情毫无意义。 如果使用execute()
,则不应再次执行查询以获取结果集。 这样做效率低下,因为您要数据库服务器重做它对第一个execute()
所做的工作,请改用getResultSet()
。 如PreparedStatement.execute()
:
execute
方法返回一个boolean
以指示第一个结果的形式。 您必须调用方法getResultSet
或getUpdateCount
来检索结果。 您必须调用getMoreResults
才能移至任何后续结果。
但是,如果您知道要执行的查询会生成一个结果集(即使它为空,select也会始终生成一个结果集!),则应使用executeQuery()
。 这简化了您的代码。
您的代码也有一个无限循环。 您是要使用if (rs1)
代替while(rs1)
吗?
您应该将代码更改为
try (PreparedStatement ps=conn.prepareStatement(QueryMapper.SCHEDULE_APPLICANT_STATUS)) {
ps.setString(1,schedule_id);
try (ResultSet rs = ps.executeQuery()) {
// or maybe if (rs.next())?
while (rs.next()) {
Application applicationBean= new Application();
System.out.println("ABC"+schedule_id);
applicationBean.setScheduledProgramId(rs.getString(3));
applicationBean.setStatus(rs.getString(2));
applicationBean.setApplicantId(rs.getString(1));
applicationList.add(applicationBean);
applicationCount++;
}
}
} catch (SQLException sqlException) {
log.error(sqlException.getMessage());
System.out.println(sqlException.getMessage());
}
您不需要两个ResultSet对象,只需要执行一次PreparedStatement。 典型的模式是:
rs = ps.executeQuery();
while (rs.next()) {
// process the row returned by next()
// e.g.,
System.out.println(rs.getString(1));
}
您想念您的读者。 它必须类似于:while(rs1.read())
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.