Я не могу отобразить первую запись из моего запроса, который возвращает несколько ответов. Например, поиск с набором результатов из пяти вернет со второго по пятый и пропустит первую запись. Если я ищу что-то, что имеет одну запись в качестве вывода, она ничего не возвращает, а просто зависает, потому что это первая и единственная запись в базе данных. Когда я отлаживаю его и ищу что-то, что, как я знаю, имеет только одну запись в БД, он переходит к строке 12, затем 15, затем 25. Как я могу изменить цикл, чтобы включить первую запись, которая также будет напечатана?
КОД:
try {
ResultSet rs;
String comparex = jTextField2.getText().trim().toUpperCase();// puts the textfield into a string object
rs = stmt.executeQuery(
"SELECT * FROM BASTIMP where DETAILS like '%"+comparex+"%'"
); //paradox equivalent '..comparex..'
String amount;
String date;
String attached = "";
if (rs.next()) // **Line 12**
{
}else {
DisplayAreaX.setText("ENTER VALID VENDOR");
}
while (rs.next()) { // **Line 15**
String details = rs.getString("DETAILS"); //get results from DETAILS
date = rs.getString ("DATE PAID"); //CORRECT?
amount = rs.getString ("AMOUNT BANK");
attached = attached + details +":"+ '\n'+ "Date " +date+ " / "+
"Amount £"+ amount+ '\n'; // - ADDS MULTIPLE ENTRIES ON OUTPUT OF jList!
DisplayAreaX.setText(attached);
System.out.println(details+":"+ '\n'+ "Date "+date+ " / "+
"Amount £"+ amount+ '\n');
}
} catch (SQLException e) {
System.out.println("SQL Exception: " + e.toString());
} catch (ClassNotFoundException cE) {
System.out.println("Class Not Found Exception: " + cE.toString());
} // **Line 25**
Спасибо




Вы дважды вызываете rs.next (), прежде чем получить доступ к результатам. Я бы сказал, что есть два варианта: сначала замените while на цикл do ... while или удалите оператор if / else и отслеживайте результаты в счетчике, а в конце проверьте, равен ли счетчик 0 и затем отобразите сообщение.
Привет, спасибо за ответ. Он отлично работает, когда я удаляю оператор if / else. Но как код может отображать «недопустимый поставщик» при вводе неверных данных? Не могли бы вы поправить код?
Почему бы не изменить логику на:
int recordCount = 0;
while (rs.next())
{
recordCount ++;
String details = rs.getString("DETAILS"); //get results from DETAILS
date = rs.getString ("DATE PAID"); //CORRECT?
amount = rs.getString ("AMOUNT BANK");
attached = attached + details +":"+ '\n'+ "Date " +date+ " / "+ "Amount £"+ amount+ '\n'; // - ADDS MULTIPLE ENTRIES ON OUTPUT OF jList!
DisplayAreaX.setText(attached);
System.out.println(details+":"+ '\n'+ "Date "+date+ " / "+ "Amount £"+ amount+ '\n');
}
if (recordCount == 0)
{
DisplayAreaX.setText("ENTER VALID VENDOR");
}
Спасибо за ответ, единственная проблема, когда я пытаюсь, я получаю ошибку «несовместимые типы boolean и int». Также оператор ++ не может применяться к логическому типу.
Я думаю, что намеревались сделать recordCount целым.
Просто используйте вместо этого оператор делать пока, пока :-)
Сделано, по крайней мере, частично. Можно было бы сделать еще немного очистки