2012-08-05 27 views
6

Ho il codice seguito in un servlet -query SQL eseguire con 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); 

Quando sulla corsa e raggiungere la linea di int numOfMatch = numOfMatchResult.getInt(1); si genera l'eccezione - java.sql.SQLException. L'ho controllato e l'ho visto perché lo executeQuery() non ha recuperato nessuno. si verifica anche se ho nella tabella persons, creata con MySQL, i 2 campi - id (text) con valore "300" e password (text) con valore "500". e naturalmente lo controllo quando loginID e loginPassword con gli stessi 2 valori. Ho controllato tutte le altre cose sulla connessione al DB ed era OK .. quindi penso che il problema sia nella sintassi SQL in strSQLcount.

+0

Mostrare il messaggio/traccia Eccezione. Indica se il tuo codice è mai stato collegato a quel database specifico. – Javier

risposta

6

Hai dimenticato di chiamare next() sul set di risultati:

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

Se questo non è sufficiente a risolvere il problema, incollare l'intera traccia dello stack dell'eccezione: contiene informazioni significative.

+0

grazie abbastanza :) quindi fino a che non faccio "rs.next()" al ResultSet non posso usarlo? – URL87

+0

Ogni volta che si desidera recuperare informazioni da un set di risultati, è necessario posizionare il cursore su una determinata riga di dati. 'rs.next()' lo posiziona sulla riga successiva (il primo la prima volta che viene chiamato). –

Problemi correlati