Error al usar el PreparedStatement

funny
01 de Junio del 2005
Alguien me puede decir cual es el error en este código? Es la primera vez que uso el PreparedStatement...

String sql = "SELECT COUNT(IDEMP) AS NUMERO_DE_FILAS, IDEMP, CONTRASENA, NOMBRE FROM EMPLEADOS WHERE CONTRASENA = ? AND NOMBRE = ? GROUP BY CONTRASENA, NOMBRE, IDEMP";
PreparedStatement ps = conex.prepareStatement(sql);
ps.setInt(1, contra);
ps.setString(2, login);
System.out.println(sql);
ResultSet rs = ps.executeQuery(sql);
rs.next();
int n_f = rs.getInt("NUMERO_DE_FILAS");
int i = rs.getInt("IDEMP");
int c = rs.getInt("CONTRASENA");
String n = rs.getString("NOMBRE");
System.out.println(i + " " + c + " " + n + " " + n_f);

Me da el siguiente error:
StandardWrapperValve[debugjsp]: Servlet.service() for servlet debugjsp threw exception
javax.servlet.ServletException: ORA-01008: no todas las variables han sido transferidas.

gioboy
01 de Junio del 2005
las interrogaciones van entre parentesis.

Por lo demás ten cuidado con las comillas, tanto simples como dobles.

Lo digo porque si nombre y contrasena son varchar hay que compararlo tal que asi:

String sql = "SELECT COUNT(IDEMP) AS NUMERO_DE_FILAS, IDEMP, CONTRASENA, NOMBRE FROM EMPLEADOS WHERE CONTRASENA = '(?)' AND NOMBRE = '(?)' GROUP BY CONTRASENA, NOMBRE, IDEMP";
PreparedStatement ps = conex.prepareStatement(sql);
ps.setInt(1, contra);
ps.setString(2, login);
System.out.println(sql);
ResultSet rs = ps.executeQuery(sql);
rs.next();
int n_f = rs.getInt("NUMERO_DE_FILAS");
int i = rs.getInt("IDEMP");
int c = rs.getInt("CONTRASENA");
String n = rs.getString("NOMBRE");
System.out.println(i + " " + c + " " + n + " " + n_f);

funny
01 de Junio del 2005
Muchas gracias, a pesar de que el error estaba en la línea:
ResultSet rs = ps.executeQuery(sql);
lo correcto sería:
ResultSet rs = ps.executeQuery();

Pero se agradece la respuesta.
Gracias otra vez!