2012-08-05 27 views
6

tengo el código de seguimiento en un servlet -consulta SQL ejecutar 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); 

Cuando el correr y llegar a la línea de int numOfMatch = numOfMatchResult.getInt(1); se produce la excepción - java.sql.SQLException. Lo revisé y lo vi porque el executeQuery() no recuperó a nadie. ocurre aunque tengo en la tabla persons, creada con MySQL, los 2 campos - id (text) con el valor "300" y password (text) con el valor "500". y por supuesto lo controlo cuando loginID y loginPassword con los mismos 2 valores. Comprobé todas las otras cosas sobre la conexión a la base de datos y estaba bien ... así que creo que el problema está en la sintaxis de SQL en strSQLcount.

+0

Por favor, muestre el mensaje/rastreo de excepción. Dígame si su código alguna vez se ha conectado a esa base de datos específica. – Javier

Respuesta

6

que se olvidó de llamar next() en el conjunto de resultados:

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

Si eso no es suficiente para resolver el problema, pegue toda la traza de la pila de la excepción, ya que contiene información significativa.

+0

gracias suficiente :) así que hasta que no haga "rs.next()" al ResultSet no puedo usarlo? – URL87

+0

Cada vez que desee recuperar información de un conjunto de resultados, debe hacer que el cursor apunte a una determinada fila de datos. 'rs.next()' lo coloca en la siguiente fila (el primero la primera vez que se llama). –

Cuestiones relacionadas