Foros del Web » Programación para mayores de 30 ;) » Java »

SQLException parameter out of bounds

Estas en el tema de SQLException parameter out of bounds en el foro de Java en Foros del Web. ¡Hola a todos! Seguro que es un problema fácil de resolver, pero estoy aprendiendo y aún hay muchas cosas que desconozco Estoy intentando hacer una ...
  #1 (permalink)  
Antiguo 16/11/2014, 08:14
Avatar de GameAndWatch  
Fecha de Ingreso: septiembre-2011
Mensajes: 56
Antigüedad: 12 años, 7 meses
Puntos: 1
Pregunta SQLException parameter out of bounds

¡Hola a todos!

Seguro que es un problema fácil de resolver, pero estoy aprendiendo y aún hay muchas cosas que desconozco

Estoy intentando hacer una consulta a una base de datos de MySQL con prepareStatement, pero me salta este error:
java.sql.SQLException: Parameter index out of bounds. 2 is not between valid values of 1 and 1

El código es el siguiente:

Código Java:
Ver original
  1. try {
  2. Connection conexion = DriverManager.getConnection("jdbc:mysql://127.0.0.1/ejemplobd?useServerPrepStmts=true","user","pass");
  3.     Statement estado = conexion.createStatement();
  4. for(int x=1; x < 20 +1; x++)
  5. /*Recogida de datos de los elementos de la ventana*/
  6. String sentencia = "SELECT 'name', 'id', 'email', 'session' FROM users WHERE 'name' = '?' and 'id' = ? and 'session' = '?'";
  7. PreparedStatement consulta = conexion.prepareStatement(sentencia);
  8. consulta.setString(1, nombre);
  9. consulta.setInt(2, n_id);
  10. consulta.setString(3, s_session);
  11. ResultSet resultado = consulta.executeQuery(sentencia);
  12. /*tratamiento de los datos que debería recibir*/
  13. }
  14.  } catch (SQLException e) {
  15. e.printStackTrace();
  16. }

¿Qué es lo que pasa?¿Podría ser un problema de comillas?(Porque se esperan que el dato nombre pueda llevar comillas)
__________________
Poco a poco,avanzando en Javascript....
  #2 (permalink)  
Antiguo 16/11/2014, 13:56
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: SQLException parameter out of bounds

Si, es eso. Cuando usas expresiones preparadas, no se utilizan las comillas simples.

Código Java:
Ver original
  1. String sentencia = "SELECT 'name', 'id', 'email', 'session' FROM users WHERE 'name' = ? and 'id' = ? and 'session' = ?";

Un saludo
__________________
If to err is human, then programmers are the most human of us
  #3 (permalink)  
Antiguo 16/11/2014, 14:14
Avatar de GameAndWatch  
Fecha de Ingreso: septiembre-2011
Mensajes: 56
Antigüedad: 12 años, 7 meses
Puntos: 1
Respuesta: SQLException parameter out of bounds

Cita:
Iniciado por Profesor_Falken Ver Mensaje
Si, es eso. Cuando usas expresiones preparadas, no se utilizan las comillas simples.

Código Java:
Ver original
  1. String sentencia = "SELECT 'name', 'id', 'email', 'session' FROM users WHERE 'name' = ? and 'id' = ? and 'session' = ?";

Un saludo

Si, era exactamente eso. Muchísimas gracias

Pero ha salido un problema más raro
Al enviar la sentencia SQL, no sustituye los valores: Envia literalmente las interrogaciones.

¿Me falta algo importante? Por que me parece raro raro...
__________________
Poco a poco,avanzando en Javascript....
  #4 (permalink)  
Antiguo 16/11/2014, 14:29
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: SQLException parameter out of bounds

Buenas,

No, aparentemente estás haciendolo de la forma correcta. ¿Como hacer para verificar que está enviando las interrogaciones?


Un saludo
__________________
If to err is human, then programmers are the most human of us
  #5 (permalink)  
Antiguo 16/11/2014, 14:56
Avatar de GameAndWatch  
Fecha de Ingreso: septiembre-2011
Mensajes: 56
Antigüedad: 12 años, 7 meses
Puntos: 1
Respuesta: SQLException parameter out of bounds

Cita:
Iniciado por Profesor_Falken Ver Mensaje
Buenas,

No, aparentemente estás haciendolo de la forma correcta. ¿Como hacer para verificar que está enviando las interrogaciones?


Un saludo
Envia un error de que la consulta no es correcta, indicando que aun tiene las interrogaciones. Pero para asegurarme, como son pruebas en local he habilitado los logs de MySQL, y parce que es que lo recibe literalmente (es lo que muestra el log, con las interrogaciones y todo en vez de sustituri los valores).

Me parece muy raro... y parece ser que soy al único en el mundo al que le pasa
__________________
Poco a poco,avanzando en Javascript....
  #6 (permalink)  
Antiguo 17/11/2014, 01:48
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: SQLException parameter out of bounds

Puedes poner el error exacto que te esta dando?

Por otro lado, en tu codigo veo una cosa un tanto extrana, en esta linea:
Código Java:
Ver original
  1. Statement estado = conexion.createStatement();

Donde usas ese statement?

Un saludo
__________________
If to err is human, then programmers are the most human of us
  #7 (permalink)  
Antiguo 17/11/2014, 07:00
Avatar de GameAndWatch  
Fecha de Ingreso: septiembre-2011
Mensajes: 56
Antigüedad: 12 años, 7 meses
Puntos: 1
Respuesta: SQLException parameter out of bounds

Cita:
Iniciado por Profesor_Falken Ver Mensaje
Puedes poner el error exacto que te esta dando?

Por otro lado, en tu codigo veo una cosa un tanto extrana, en esta linea:
Código Java:
Ver original
  1. Statement estado = conexion.createStatement();

Donde usas ese statement?

Un saludo
Ese statement lo pensaba utilizar para otra consulta con parámetros estáticos, se me ha olvidado quitarlo. Lo siento.

El error que devuelve es que la sintaxis no es correcta:
Código Java:
Ver original
  1. com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? and 'id' = ? and 'session' = ?' at line 1


Y, además, mirando el log de MySQL, veo que literalmente, ha enviado la consulta sin tratar:

Código SQL:
Ver original
  1. SET character_set_results = NULL
  2.             1 Query SET autocommit=1
  3.             1 Query SET sql_mode='STRICT_TRANS_TABLES'
  4.             1 Query SELECT 'name', 'id', 'email', 'session' FROM users WHERE 'name' = ? AND 'id' = ? AND 'session' = ?

Me parece muy raro. Siento molestar con esto, de verdad
__________________
Poco a poco,avanzando en Javascript....
  #8 (permalink)  
Antiguo 17/11/2014, 07:30
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: SQLException parameter out of bounds

Buenas,

Has probado a quitar esas comillas simples tan extranas que has puesto en los nombres de los campos y los espacios antes de los placeholder?

Código Java:
Ver original
  1. String sentencia = "SELECT name, id, email, session FROM users WHERE name=? and id=? and session=?";

Un saludo
__________________
If to err is human, then programmers are the most human of us
  #9 (permalink)  
Antiguo 17/11/2014, 09:01
Avatar de GameAndWatch  
Fecha de Ingreso: septiembre-2011
Mensajes: 56
Antigüedad: 12 años, 7 meses
Puntos: 1
Respuesta: SQLException parameter out of bounds

Cita:
Iniciado por Profesor_Falken Ver Mensaje
Buenas,

Has probado a quitar esas comillas simples tan extranas que has puesto en los nombres de los campos y los espacios antes de los placeholder?

Código Java:
Ver original
  1. String sentencia = "SELECT name, id, email, session FROM users WHERE name=? and id=? and session=?";

Un saludo
Acabo de probarlo. Exactamente el mismo error, tanto en el log de MySQL como el que muestra en Java. Yo ya no sé ni qué pensar, en serio

De nuevo, gracias por la ayuda.
__________________
Poco a poco,avanzando en Javascript....
  #10 (permalink)  
Antiguo 17/11/2014, 12:00
Avatar de GameAndWatch  
Fecha de Ingreso: septiembre-2011
Mensajes: 56
Antigüedad: 12 años, 7 meses
Puntos: 1
Respuesta: SQLException parameter out of bounds

Perdón por el doble-post, pero ya he conseguido resolverlo. Resulta que no los enviaba, porque el resulset volcía a ponerlos como estaba. Se resuelve así, sin parámetros

ResultSet resultado = consulta.executeQuery();
__________________
Poco a poco,avanzando en Javascript....
  #11 (permalink)  
Antiguo 17/11/2014, 12:36
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: SQLException parameter out of bounds

Misterio resuelto!


Un saludo
__________________
If to err is human, then programmers are the most human of us

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:29.