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

[SOLUCIONADO] Problema MySQL update

Estas en el tema de Problema MySQL update en el foro de Java en Foros del Web. Buenas tardes a todos, tengo un problema con mi programa en el cual quiero actualizar unos registros en la base de datos pero no me ...
  #1 (permalink)  
Antiguo 09/10/2014, 21:16
 
Fecha de Ingreso: octubre-2014
Mensajes: 39
Antigüedad: 9 años, 6 meses
Puntos: 0
Problema MySQL update

Buenas tardes a todos, tengo un problema con mi programa en el cual quiero actualizar unos registros en la base de datos pero no me funciona el update.


Acá les paso el codigo del metodo update:


public void modificarArticulo(int id, String nombre, String descripcion, int stockMinimo, int stockActual) {
Connection miConexion = (Connection) ConexionDB.GetConnection();
// set the preparedstatement parameters
try { // create our java preparedstatement using a sql update query
PreparedStatement ps = miConexion.prepareStatement("UPDATE productos SET "
+ "nombre = ?, "
+ "descripcion = ?, "
+ "stockMinimo = ?, "
+ "stockActual = ? "
+ "WHERE id = ?");
// set the preparedstatement parameters
ps.setString(1, nombre);
ps.setString(2, descripcion);
ps.setInt(3, stockMinimo);
ps.setInt(4, stockActual);
ps.setInt(5, id);

JOptionPane.showMessageDialog(null, "Los datos a actualizar son:\n \n "
+ "Indice '"+id+"'\n "
+ "Nombre '"+nombre+"'\n "
+ "Descripcion '"+descripcion+"'\n "
+ "Stock Minimo '"+stockMinimo+"'\n "
+ "Stock Actual '"+stockActual+"'");

// call executeUpdate to execute our sql update statement
ps.executeUpdate();
ps.close();
JOptionPane.showMessageDialog(null, "Datos actualizados correctamente");
}

catch (SQLException e) {
JOptionPane.showMessageDialog(null, "No se pudo actualizar el registro");
}
}

En este metodo el progama ejecuta la consulta update, pero no tiene efecto en la tabla, osea, me dice que los datos fueron actualizados correctamente, pero en realidad no se actualizo nada.

Y este codigo que dejo acá abajo, es el metodo que llama al metodo de actualizar:


if (botonPrecionado == "ModificarProducto") {
//INSTANCIO UN OBJETO ARTICULO
Articulo prod = new Articulo();
mostrarCamposEnEdits();

int id = Integer.parseInt(jTable1.getValueAt(jTable1.getSel ectedRow(), 0).toString());
String nombre = jTextField2.getText();
String descripcion = jTextField3.getText();
int stockMinimo = Integer.parseInt(jTextField4.getText());
int stockActual = Integer.parseInt(jTextField5.getText());

prod.modificarArticulo(id, nombre, descripcion, stockMinimo, stockActual);

cargarTablaProductos();
blanqueoCampos();
}

Eternamente agradecido con quienes me puedan ayudar con este tema.

Muchas gracias.
Saludos.
  #2 (permalink)  
Antiguo 10/10/2014, 01:00
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: Problema MySQL update

Buenas,

Es muy extrano lo que comentas. Es muy importante que haces en tu clase ConexionDB.

Quizas es porque no tienes el autoCommit activado?

conn.setAutoCommit(false);

Prueba a activarlo:
miConexion.setAutoCommit(true);

O bien cuando haces la consulta llama explicitamente al commit al terminar:
[...]
ps.executeUpdate();
miConexion.commit()
[...]

EDITO: tambien veo que no estas comprobando si realmente se ha actualizado algun campo (muestras el mensaje pero no sabes si ha actualizado o no). Estas seguro de que la query construida afecta alguna fila?

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

Última edición por Profesor_Falken; 10/10/2014 a las 06:00
  #3 (permalink)  
Antiguo 10/10/2014, 13:41
 
Fecha de Ingreso: octubre-2014
Mensajes: 39
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Problema MySQL update

Hola profesor, hice lo que me indicaste, pero ahora me levanta la excepción. Como debería ser el método para modificar un registro, porque he googleando bastante y todos tienen ese formato.

Otra consulta, puede ser porque le este pasando mal el parametro ID? como debería pasarlo?.

Saludos.
  #4 (permalink)  
Antiguo 11/10/2014, 01:23
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: Problema MySQL update

Buenas,

No comentas cual es la excepción que te da, que es fundamental para saber que pasa.

Respecto al ID, creo que no has entendido bien lo que te ha dicho choces en Javahispano.

Lo que él te trata de decir es lo que te digo yo también al final de mi post. NO COMPRUEBAS SI SE HA MODIFICADO ALGO O NO. Aún así, muestras un mensaje siempre indicando que se ha modificado.

Pongamos que en tu tabla de productos tienes tres elementos con ID 1, 2 y 3. Luego haces un update utilizando un WHERE id=15 . Esa consulta no te va a dar ningún tipo de error ni excepción. Se va a ejectura correctamente pero te va a indicar que no se ha actualizado ningún elemento.

Para que lo entiendas bien, prueba este código modificado:

Código Java:
Ver original
  1. public void modificarArticulo(int id, String nombre, String descripcion, int stockMinimo, int stockActual) {
  2. Connection miConexion = (Connection) ConexionDB.GetConnection();
  3. // set the preparedstatement parameters
  4. try { // create our java preparedstatement using a sql update query
  5. ps = miConexion.prepareStatement("UPDATE productos SET "
  6. + "nombre = ?, "
  7. + "descripcion = ?, "
  8. + "stockMinimo = ?, "
  9. + "stockActual = ? "
  10. + "WHERE id = ?");
  11. // set the preparedstatement parameters
  12. ps.setString(1, nombre);
  13. ps.setString(2, descripcion);
  14. ps.setInt(3, stockMinimo);
  15. ps.setInt(4, stockActual);
  16. ps.setInt(5, id);
  17.  
  18. JOptionPane.showMessageDialog(null, "Los datos a actualizar son:\n \n "
  19. + "Indice '"+id+"'\n "
  20. + "Nombre '"+nombre+"'\n "
  21. + "Descripcion '"+descripcion+"'\n "
  22. + "Stock Minimo '"+stockMinimo+"'\n "
  23. + "Stock Actual '"+stockActual+"'");
  24.  
  25. JOptionPane.showMessageDialog(null, "RECUERDA: vas a modificar el elemento con ID: " + id + ". Verifica que existe en la base de datos un registro con dicho ID");
  26.  
  27. // call executeUpdate to execute our sql update statement
  28. int filasModificadas = ps.executeUpdate();
  29. if (filasModificadas == 0) {
  30. JOptionPane.showMessageDialog(null, "No se ha actualizado ningún registro");
  31. } else {
  32. JOptionPane.showMessageDialog(null, "Datos actualizados correctamente");
  33. }
  34. }
  35.  
  36. catch (SQLException e) {
  37. JOptionPane.showMessageDialog(null, "No se pudo actualizar el registro");
  38. } finally {
  39. if (ps != null) {
  40. ps.close();
  41. }
  42. }
  43. }

Un saludo
__________________
If to err is human, then programmers are the most human of us
  #5 (permalink)  
Antiguo 13/10/2014, 13:45
 
Fecha de Ingreso: octubre-2014
Mensajes: 39
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Problema MySQL update

Hola Profesor, hice como me indicaste, reemplace mi codigo por el que me pasaste, me dice el ID que voy a modificar y me dice que lo modifica correctamente. Verifique en la base de datos que exista un registro con ese ID y efectivamente existe, el tema es que aun asi los cambios no surgen efecto.... A que se puede deber este problema??? las altas, consultas y bajas no me causan estos inconvenientes

Saludos.
  #6 (permalink)  
Antiguo 14/10/2014, 00:44
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: Problema MySQL update

Buenas,

Entonces yo diria que el problema esta en el commit, como te comentaba al principio.

Prueba a poner un miConexion.commit() justo despues del ps.executeUpdate();

Si te lanza una excepcion, muestrala con e.printStackTrace() y posteala.


Un saludo
__________________
If to err is human, then programmers are the most human of us
  #7 (permalink)  
Antiguo 15/10/2014, 07:41
 
Fecha de Ingreso: octubre-2014
Mensajes: 39
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Problema MySQL update

Hola Profesor, hice como me indicaste, pero sigue sin surgir efecto.
Ahora cuando quiero hacer el commit me levanta la excepción que le definí el try-catch de miConexion.commit();

Acá dejo el código:

<code>
public void modificarArticulo(int id, String nombre, String descripcion, int stockMinimo, int stockActual) throws SQLException {

Connection miConexion = (Connection) ConexionDB.GetConnection();
PreparedStatement ps = null;
// set the preparedstatement parameters
try { // create our java preparedstatement using a sql update query
ps = miConexion.prepareStatement("UPDATE productos SET "
+ "nombre = ?, "
+ "descripcion = ?, "
+ "stockMinimo = ?, "
+ "stockActual = ? "
+ "WHERE id = ?");
// set the preparedstatement parameters
ps.setString(1, nombre);
ps.setString(2, descripcion);
ps.setInt(3, stockMinimo);
ps.setInt(4, stockActual);
ps.setInt(5, id);

JOptionPane.showMessageDialog(null, "Los datos a actualizar son:\n \n "
+ "Indice '"+id+"'\n "
+ "Nombre '"+nombre+"'\n "
+ "Descripcion '"+descripcion+"'\n "
+ "Stock Minimo '"+stockMinimo+"'\n "
+ "Stock Actual '"+stockActual+"'");

JOptionPane.showMessageDialog(null, "RECUERDA: vas a modificar el elemento con ID: " + id + ". Verifica que existe en la base de datos un registro con dicho ID");

// call executeUpdate to execute our sql update statement
int filasModificadas = ps.executeUpdate();
try{
miConexion.commit();
}catch (SQLException e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, "No se pudo hacer el commit");
}
if (filasModificadas == 0) {
JOptionPane.showMessageDialog(null, "No se ha actualizado ningún registro");
} else {
JOptionPane.showMessageDialog(null, "Datos actualizados correctamente");
}
}

catch (SQLException e) {
JOptionPane.showMessageDialog(null, "No se pudo actualizar el registro");
} finally {
if (ps != null) {
ps.close();
}
}

}
<code>


Muchas gracias por la ayuda.
  #8 (permalink)  
Antiguo 15/10/2014, 07:43
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: Problema MySQL update

Puedes poner la excepcion?
__________________
If to err is human, then programmers are the most human of us
  #9 (permalink)  
Antiguo 15/10/2014, 08:22
 
Fecha de Ingreso: octubre-2014
Mensajes: 39
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Problema MySQL update

Acá actualice el codigo, y pongo una captura de la excepción:

Cita:
public void modificarArticulo(int id, String nombre, String descripcion, int stockMinimo, int stockActual) throws SQLException {

Connection miConexion = (Connection) ConexionDB.GetConnection();
PreparedStatement ps = null;
// set the preparedstatement parameters
try { // create our java preparedstatement using a sql update query
ps = miConexion.prepareStatement("UPDATE productos SET "
+ "nombre = ?, "
+ "descripcion = ?, "
+ "stockMinimo = ?, "
+ "stockActual = ? "
+ "WHERE id = ?");
// set the preparedstatement parameters
ps.setString(1, nombre);
ps.setString(2, descripcion);
ps.setInt(3, stockMinimo);
ps.setInt(4, stockActual);
ps.setInt(5, id);

JOptionPane.showMessageDialog(null, "Los datos a actualizar son:\n \n "
+ "Indice '"+id+"'\n "
+ "Nombre '"+nombre+"'\n "
+ "Descripcion '"+descripcion+"'\n "
+ "Stock Minimo '"+stockMinimo+"'\n "
+ "Stock Actual '"+stockActual+"'");

JOptionPane.showMessageDialog(null, "RECUERDA: vas a modificar el elemento con ID: " + id + ". Verifica que existe en la base de datos un registro con dicho ID");

// call executeUpdate to execute our sql update statement
int filasModificadas = ps.executeUpdate();
try{
miConexion.commit();
}catch (SQLException e) {
JOptionPane.showMessageDialog(null, e,"No se pudo hacer el commit"+e.getMessage(), JOptionPane.ERROR_MESSAGE);
}
if (filasModificadas == 0) {
JOptionPane.showMessageDialog(null, "No se ha actualizado ningún registro");
} else {
JOptionPane.showMessageDialog(null, "Datos actualizados correctamente");
}
}

catch (SQLException e) {
JOptionPane.showMessageDialog(null, "No se pudo actualizar el registro");
} finally {
if (ps != null) {
ps.close();
}
}

}
no me deja insertar la imagen, pero el mensaje de la excepción es el siguiente:
"java.sql.SQLException: can't call commit when autocommit=true "


Saludos.
  #10 (permalink)  
Antiguo 15/10/2014, 09:07
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: Problema MySQL update

Ok la excepcion es totalmente explicativa y descarta lo que comentaba en el primer post.

Como lo hemos descartado, retira entonces lo del commit.

Una vez quitado, puedes cambiar esto?:
JOptionPane.showMessageDialog(null, "Datos actualizados correctamente");

Por esto:
JOptionPane.showMessageDialog(null, "Datos actualizados correctamente. Filas modificadas: " + filasModificadas);

Y nos comentar que te muestra en la ventana? (no hace falta una imagen, basta con copiar y pegar)


Un saludo
__________________
If to err is human, then programmers are the most human of us
  #11 (permalink)  
Antiguo 15/10/2014, 09:22
 
Fecha de Ingreso: octubre-2014
Mensajes: 39
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Problema MySQL update

Lo que me dice luego de hacer las modificaciones es:
"Datos actualizados correctamente. Filas modificadas: 1"

Saludos.
  #12 (permalink)  
Antiguo 15/10/2014, 11:24
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: Problema MySQL update

Buenas,

Entonces no tiene ningún sentido. La fila se tiene que modificar.

Estás cambiando algún dato al realizar la modificación?

Puedes cambiar
ps.setString(1, nombre);
por
ps.setString(1, "TEST MODIFICACION");

Para comprobar si ese valor se modifica o no?


Un saludo
__________________
If to err is human, then programmers are the most human of us
  #13 (permalink)  
Antiguo 15/10/2014, 12:52
 
Fecha de Ingreso: octubre-2014
Mensajes: 39
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Problema MySQL update

Haciendo ese cambio el valor se cambio, Aparentemente hay un problema con el pasaje de parametros...
  #14 (permalink)  
Antiguo 16/10/2014, 01:08
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: Problema MySQL update

Pues si... lo has encontrado ya?
__________________
If to err is human, then programmers are the most human of us
  #15 (permalink)  
Antiguo 16/10/2014, 06:28
 
Fecha de Ingreso: octubre-2014
Mensajes: 39
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Problema MySQL update

Hola Profesor, si ya encontre el problema, tenia un error en el pasaje de parametros, y ademas antes de la llamada al metodo modificar, tenia otro metodo que me afectaba a la modificacion que hacia en los edits. Ahora anda todo perfecto.

Muchas gracias por ayuda.
Saludos.

Etiquetas: jtable, mysql, programa, string, update
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 01:17.