这是我的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
语句执行时,它返回了true
,这意味着正在返回某些结果集。为什么我的executeQuery
返回null。
我要运行的sql查询是
从* SCHEDULED_PROGRAM_ID =的应用程序中选择*
此查询在sql管理器中执行时运行良好并获取结果。
你能告诉我我做错了什么吗
答案 0 :(得分:2)
在所示的代码中,rs
仅在null
为假时才为rs1
,这仅在执行不产生结果集的情况下才是这种情况(或者您的JDBC驱动程序有错误,但是可能性很小)。
但是您在做什么,没有任何意义。如果使用execute()
,则不应再次执行查询以获取结果集。这样做效率低下,因为您要数据库服务器重做它对第一个execute()
所做的工作,请改用getResultSet()
。如PreparedStatement.execute()
所述:
execute
方法返回一个boolean
来指示 第一个结果。您必须调用方法getResultSet
或getUpdateCount
检索结果;你必须打电话getMoreResults
移至任何后续结果。
但是,如果您知道正在执行的查询会产生一个结果集(并且选择总是会产生一个结果集,即使它为空!),那么您应该使用{{1 }}。这样可以简化您的代码。
您的代码也有一个无限循环。您是要使用executeQuery()
而不是if (rs1)
吗?
您应该将代码更改为类似
while(rs1)
答案 1 :(得分:1)
您不需要两个ResultSet对象,只需要执行一次PreparedStatement。典型的模式是:
rs = ps.executeQuery();
while (rs.next()) {
// process the row returned by next()
// e.g.,
System.out.println(rs.getString(1));
}
答案 2 :(得分:-1)
您缺少读者。 它必须类似于:while(rs1.read())