Java - java y sql Codigo incorrecto

   
Vista:

java y sql Codigo incorrecto

Publicado por jash (8 intervenciones) el 07/04/2009 18:14:00
Se trata de un programa que trabaja con el modelo vista-controlador MVP y no me funciona un método que tiene que cambiar un valor a una tabla. El método es el siguiente

public void CambiarEstadoPalabras(String idusu){

String sql = "update palabras p set estado = 1 where p.idusu = ?";
try
{
PreparedStatement st2=conexion.prepareStatement(sql);
st2.setString(1, idusu);
st2.executeUpdate(sql);
}
catch (SQLException sqle)
{
System.out.println ("Error en proceso CambiarEstado() en la tabla palabras.");
}
}

El campo que se quiere modificar en la tabla es de tipo entero, desde un pagina jsp se le manda un parámetro a una clase. Esta clase recoge el parámetro como un String, crea una conexión a la base de datos y se le pasa el parámetro a un método que finalmente es quien hace la consulta a la base de datos. este es el método que falla porque me salta la SQL Exception y no se porque.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:java y sql Codigo incorrecto

Publicado por webness (57 intervenciones) el 07/04/2009 23:26:56
dices que el campo que tienes que modificar es entero, y haces esto
st2.setString(1, idusu);
deberias de hacer: st2.setInt(1,Integer.parseInt(idusu));
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:java y sql Codigo incorrecto

Publicado por jash (8 intervenciones) el 08/04/2009 01:36:01
Me sigue saltando la excepcion.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:java y sql Codigo incorrecto

Publicado por 1a2a3a4a (57 intervenciones) el 08/04/2009 05:26:27
El dice que "El campo que se quiere modificar en la tabla es de tipo entero", mas no dice que el p.idusu es entero,supongo que es string por lo que seteas
st2.setString(1, idusu);

podrias pintar la excepcion que lanza, podria ser que no exista la tabla, la columna etc.

catch (SQLException sqle)
{
System.out.println ("Error en proceso CambiarEstado() en la tabla palabras."+sqle.getMessage());
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:java y sql Codigo incorrecto

Publicado por jash (8 intervenciones) el 08/04/2009 17:32:06
La tabla existe, gracias por el aporte.
Efectivamente la Excepcion viene porque la sentencia esta mal escrita me lo dice en la SQLException, he modificado la sentencia pero mesigue saltando la Exception.

Al principio me dijo que modificara en la sentencia el parametro ? por '?'
Ahora tengo la siguiente sentencia

String sql = "update palabras p set estado = 1 where p.idusu = '?'";

y me salta la siguiente Exception

Parameter index out of range (1 > number of parameters, which is 0).

Mi metodo pretende cambiar campo con valor 1 a valor 0

//cambia el estado de la palabra 0 "peticion en proceso" a 1 "peticion aceptada" en la tabla palabras
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:java y sql Codigo incorrecto

Publicado por 1a2a3a4a (57 intervenciones) el 09/04/2009 04:28:35
Hola con la excepcion que te lanza, te das claramente del error

String sql = "update palabras p set estado = 1 where p.idusu = '?'";
try
{
PreparedStatement st2=conexion.prepareStatement(sql);
st2.setString(1, idusu);
st2.executeUpdate(sql);
}

No debes poner el ? como '?', porque lo toma como caracter y no como parametro
por eso te lanza la excepcion ,ya que no hay parametro con indice 1, es decir
no hay parametros.

"Parameter index out of range (1 > number of parameters, which is 0). "

hm, podrias pega que excepcion te bota al ponerlo sin caracter,
tambien pega la estructura de tu tabla.

prueba con

String sql = "update palabras set estado = 1 where idusu = ?";

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

RE:java y sql Codigo incorrecto

Publicado por jash (8 intervenciones) el 09/04/2009 18:23:55
gracias por el aporte.

he quitado el ? entre comillas para que me lo tome como parametro, pero me salta otra Exception

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 '?' at line 1

por esto pensaba que haba que meterlo entre comillas, pero parece ser que no

se trata de dos tablas palabras y usuarios

usuarios contiene: idusu(pk),nombre,direccion,cp,localidad,email,codpeticion

palabras contiene: idusu(pk),palabra,significado,votos,estado,clave

atraves del idusu que será el mismo en las dos tablas quiero cambiar el estado de un palabra que ha adquirido un usuario.

gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:java y sql Codigo incorrecto

Publicado por 1a2a3a4a (57 intervenciones) el 10/04/2009 01:15:24
puedes pegar la estructura?

desc usuarios;

desc palabras;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:java y sql Codigo incorrecto

Publicado por jash (8 intervenciones) el 12/04/2009 23:35:01
hola de nuevo, perdona por la tardanza en contestar

mysql> desc palabras;
+-------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------------+------+-----+---------+-------+
| idusu | int(11) | NO | PRI | 0 | |
| palabra | varchar(100) | NO | PRI | | |
| significado | varchar(1500) | NO | | | |
| votos | int(11) | NO | | 0 | |
| estado | int(11) | NO | | 0 | |
| clave | varchar(20) | NO | | | |
+-------------+---------------+------+-----+---------+-------+
6 rows in set (0.01 sec)

mysql> desc usuarios;
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| idusu | int(11) | NO | PRI | NULL | auto_increment |
| nombre | varchar(50) | NO | | | |
| direccion | varchar(120) | NO | | | |
| cp | int(11) | NO | | 0 | |
| localidad | varchar(100) | NO | | | |
| email | varchar(150) | NO | | | |
| codpeticion | varchar(20) | NO | | | |
+-------------+--------------+------+-----+---------+----------------+
7 rows in set (0.00 sec)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:java y sql Codigo incorrecto

Publicado por 1a2a3a4a (57 intervenciones) el 12/04/2009 23:42:26
como veras tu campo idusu es entero, por lo tanto tienes que pasarle un parametro entero

String sql = "update palabras set estado = 1 where idusu = ?";

PreparedStatement st2=conexion.prepareStatement(sql);
st2.setInt(1, Integer.parseInt(idusu));
st2.executeUpdate(sql);

puede pintar el idusu ,antes para ver si esta llegando algun valor, talvez este llegando nulo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:java y sql Codigo incorrecto

Publicado por jash (8 intervenciones) el 13/04/2009 01:05:28
perdona por la tardanza en contestar
ahi va eso

mysql> desc usuarios;
+----------------+---------------------+--------+------+---------+---------------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+----------------------+-------+-------+---------+---------------------+
| idusu | int(11) | NO | PRI | NULL| auto_increment |
| nombre | varchar(50) | NO | | | |
| direccion | varchar(120) | NO | | | |
| cp | int(11) | NO | | 0 | |
| localidad | varchar(100) | NO | | | |
| email | varchar(150) | NO | | | |
| codpeticion | varchar(20) | NO | | | |
+------------------+---------------------+-------+-------+---------+----------------+
7 rows in set (0.00 sec)

mysql> desc palabras;
+-------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------------+------+-----+---------+-------+
| idusu | int(11) | NO | PRI | 0 | |
| palabra | varchar(100) | NO | PRI | | |
| significado | varchar(1500) | NO | | | |
| votos | int(11) | NO | | 0 | |
| estado | int(11) | NO | | 0 | |
| clave | varchar(20) | NO | | | |
+-------------+---------------+------+-----+---------+-------+
6 rows in set (0.00 sec)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:java y sql Codigo incorrecto

Publicado por 1a2a3a4a (57 intervenciones) el 13/04/2009 06:50:29
ya te conteste
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:java y sql Codigo incorrecto

Publicado por jash (8 intervenciones) el 13/04/2009 20:20:17
He mirado eso mediante la opcion de netbeans "debug main proyect"
el string idusu lleaga al metodo como "45"

pero me sigue saltando la Excepcion

Lo raro es que en otros metodos pasandole este parametro no me da ningun error, eso si le hago la conversion a tipo entero antes de pasarselo al metodo. Pero bueno, si el codigo esta bien no deberia de pasarme esto.

gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:java y sql Codigo incorrecto. Siguo igual

Publicado por jas (8 intervenciones) el 16/04/2009 17:39:35
Hola de nuevo. Estoy bastante perdio con esto.

He hecho lo anteriormente comentado en el mensaje ni pasándole el entero en vez de un string da resultado.
Parece ser que puede que la sentencia sql este mal, ya que no le veo otra solución porque el parametro viene con valor.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:java y sql Codigo incorrecto. Siguo igual

Publicado por carlos (1 intervención) el 09/03/2016 10:11:45
Hola se que le problema paso ya hace tiempo pero espero le sirva a alguno de los muchos que acuden a esta web en busqueda de ayuda, lo que pasa es que simplemente el codigo que pusiste al principio estaba bien exepto la linea

st2.executeUpdate(sql);
ya que a esta ya no es necesario pasarle el parametro sql de nuevo ya que el preparedstatement ya lo tiene, es decir deverias remplasar esa linea por esta

st2.executeUpdate();

eso y tambien como dicen algunos usuarios de este foro remplazar

getString por
getInt();

Espero le sirva a alguien saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar