2012-08-05 9 views
6

mam kod podążać serwletu -zapytań SQL wykonać z PreparedStatement

  String loginID = request.getParameter("loginId").toString(); 
      String loginPassword = request.getParameter("loginPassword").toString(); 
      String strSQLcount = "SELECT COUNT(*) as 'Number Of Match' " 
       + "FROM persons " + "WHERE (password =? AND id =?);"; 
      PreparedStatement prepareSQL = connection 
        .prepareStatement(strSQLcount); 
      prepareSQL.setString(1, loginPassword); 
      prepareSQL.setString(2, loginID); 
      ResultSet numOfMatchResult = prepareSQL.executeQuery(); 
      // now we know number of matchs ... 
      int numOfMatch = numOfMatchResult.getInt(1); 

Kiedy na prowadzeniu i dotrzeć do linii int numOfMatch = numOfMatchResult.getInt(1); zgłasza wyjątek - java.sql.SQLException. Sprawdziłem to i zobaczyłem, że to dlatego, że executeQuery() nikogo nie odzyskał. Występuje, chociaż mam w tabeli persons, utworzony za pomocą MySQL, 2 pola - id (text) o wartości "300" i password (text) o wartości "500". i oczywiście sprawdzam to, gdy loginID i loginPassword z tymi samymi 2 wartościami. Sprawdziłem wszystkie inne rzeczy dotyczące połączenia z DB i było OK ... więc myślę, że problem jest w składni SQL w strSQLcount.

+0

Proszę pokazać komunikat/ślad wyjątku. Powiedz, czy twój kod kiedykolwiek był podłączony do tej konkretnej bazy danych. – Javier

Odpowiedz

6

zapomniałeś zadzwonić next() na zestaw wyników:

ResultSet numOfMatchResult = prepareSQL.executeQuery(); 
int numOfMatch = 0; 
if (rs.next() {  
    numOfMatch = numOfMatchResult.getInt(1); 
} 

Jeśli to nie wystarczy, aby rozwiązać ten problem, należy wkleić cały ślad stosu wyjątku: zawiera istotnych informacji.

+0

dzięki temu wystarczy :) więc dopóki nie zrobię "rs.next()" do ResultSet nie mogę go użyć? – URL87

+0

Za każdym razem, gdy chcesz pobrać informacje z zestawu wyników, musisz ustawić kursor na danym wierszu danych. 'rs.next()' umieszcza go w następnym wierszu (pierwszym przy pierwszym wywołaniu). –