В показанном коде rs
может быть только null
, если rs1
равно false, что может иметь место только в том случае, если вы выполняете что-то, что не приводит к набору результатов (или если ваш драйвер JDBC имеетошибка, но это менее вероятно).
То, что вы делаете, не имеет смысла.Если вы используете execute()
, вам не следует снова выполнять запрос, чтобы получить набор результатов.Это неэффективно, так как вы просите сервер базы данных повторить работу, которую он проделал для вашего первого execute()
, вместо этого используйте getResultSet()
.Как описано в PreparedStatement.execute()
:
Метод execute
возвращает boolean
, чтобы указать форму первого результата.Вы должны вызвать либо метод getResultSet
, либо getUpdateCount
, чтобы получить результат;Вы должны позвонить getMoreResults
, чтобы перейти к любому последующему результату (ам).
Однако, если вы знаете, что выполняете запрос, который производит набор результатов (и выбор всегда * 1024)* создает набор результатов, даже если он пустой!), тогда вы должны использовать 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());
}