Как я могу заставить эту программу также печатать первую запись в списке?

Я не могу отобразить первую запись из моего запроса, который возвращает несколько ответов. Например, поиск с набором результатов из пяти вернет со второго по пятый и пропустит первую запись. Если я ищу что-то, что имеет одну запись в качестве вывода, она ничего не возвращает, а просто зависает, потому что это первая и единственная запись в базе данных. Когда я отлаживаю его и ищу что-то, что, как я знаю, имеет только одну запись в БД, он переходит к строке 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**

Спасибо

Сделано, по крайней мере, частично. Можно было бы сделать еще немного очистки

workmad3 19.01.2009 22:59
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
193
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вы дважды вызываете rs.next (), прежде чем получить доступ к результатам. Я бы сказал, что есть два варианта: сначала замените while на цикл do ... while или удалите оператор if / else и отслеживайте результаты в счетчике, а в конце проверьте, равен ли счетчик 0 и затем отобразите сообщение.

Привет, спасибо за ответ. Он отлично работает, когда я удаляю оператор if / else. Но как код может отображать «недопустимый поставщик» при вводе неверных данных? Не могли бы вы поправить код?

CGF 19.01.2009 23:03

Почему бы не изменить логику на:

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». Также оператор ++ не может применяться к логическому типу.

CGF 19.01.2009 23:16

Я думаю, что намеревались сделать recordCount целым.

laz 19.01.2009 23:19

Просто используйте вместо этого оператор делать пока, пока :-)

Другие вопросы по теме