2012-08-05 13 views
6

Ich habe die Folge Code in einem Servlet -SQL-Abfrage ausführen mit 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); 

Wenn auf Laufen und erreichen auf die Linie int numOfMatch = numOfMatchResult.getInt(1); es die Ausnahme auslöst - java.sql.SQLException. Ich habe es überprüft und gesehen, dass es, weil die executeQuery() niemand abgerufen. es kommt vor, obwohl ich in persons Tabelle, erstellt mit MySQL, die 2 Felder - id (text) mit Wert "300" und password (text) mit Wert "500" haben. und natürlich überprüfe ich es bei loginID und loginPassword mit 2 gleichen Werten. Ich überprüfte alle anderen Dinge über die Verbindung mit der Datenbank und es war OK .. so denke ich, dass das Problem in der SQL-Syntax in strSQLcount ist.

+0

Bitte zeigen Sie die Exception-Meldung/Trace an. Bitte sagen Sie, ob Ihr Code jemals mit dieser spezifischen Datenbank verbunden ist. – Javier

Antwort

6

Sie haben vergessen next() auf der Ergebnismenge zu nennen:

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

Wenn das nicht ausreicht, um das Problem zu lösen, fügen Sie die gesamte Stack-Trace Ausnahme: es aussagekräftige Informationen enthält.

+0

danke es reicht :) also bis ich "rs.next()" nicht zum ResultSet mache kann ich es nicht benutzen? – URL87

+0

Jedes Mal, wenn Sie Informationen aus einer Ergebnismenge abrufen möchten, müssen Sie den Cursor auf eine bestimmte Datenzeile zeigen. 'rs.next()' setzt es auf die nächste Zeile (die erste beim ersten Aufruf). –

Verwandte Themen