Как я могу заставить эту программу также печатать первую запись в списке? - PullRequest
1 голос
/ 19 января 2009

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

Спасибо

Ответы [ 3 ]

2 голосов
/ 19 января 2009

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

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");
}
2 голосов
/ 19 января 2009

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

0 голосов
/ 20 января 2009

Просто используйте оператор do-while вместо while: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...