problemas al editar datos de varias tablas a la ves.
hola a todos, estoy haciendo un programa para una pequeña prepaga y me surgió un problema que me viene llevando dolor de cabeza hace días.
bueno primero les cuento que no me tira ningún stacktrace del error. asi que es medio complicado encontrar la falla en si.
así que ice esta imagen para explicarles un poco mejor
en la imagen van a ver que hay 2 cuadros de color verde los cuales al darle al botón modificar me permite guardar los datos que modifique, pero no me guarda los datos que modifique en el cuadro de color rojo.
este es el código del botón modificar.
- Inicie sesión o regístrese para enviar comentarios
Por dónde empezar...
Primero que nada, NO CONCATENES SQL. Nunca. NO CONCATENES SQL. Utiliza PreparedStatements parametrizados. NO CONCATENES SQL.
Si no sabes por qué, simplemente pon esto como valor en uno de tus campos:
Y dile adiós a tu tabla
.
Segunda, deberías usar un statement para cada update. Estás usando el mismo statement para todos los updates, tal vez de ahí viene el problema, porque los objetos de statements guardan estado.
Formato Codigo
Utiliza PreparedStaments y por favor agrega tu codigo entre tags
para que lo podamos leer mejor.
Transacción
Finalmente, qué pasa si uno de los updates falla? Está bien que los que pasaron antes dejen sus cambios? O hay alguna regla que diga que deben pasar todos, o ninguno?
Porque si tienen que pasar todos o ninguno, entonces debes además realizar todos los updates dentro del contexto de una transacción en base de datos, para que si falla uno, hagas rollback y entonces no se aplique ninguno de los cambios.
hola gracias por responder ya
hola gracias por responder ya e probado con diferentes Statement y me pasa igual.
lo que me llama la atencion es que alta1 y alta 2 si me los gurada pero el resto no.
es desir hasta esta parte del codigo si anda.
Como dice eZamudio es
Como dice eZamudio es necesario implementar transacciones y ejecutar un rollback
Gracias por responder. Y cómo
Gracias por responder. Y cómo sería eso.
SQL concatenado
Sigues concatenando SQL. Tienes que arreglar eso, de verdad.
Que valores habia
Viendo la imagen los campos que no se actualizan no tienen nada, habia un valor antes, a lo mejor no hay ni datos en la BD para esos campos.
hola, gracias por responder
hola, gracias por responder si abia balores, y no me los modifica,
lo que me llama ami la tencion es que si yo pongo de esta forma no me deja guardar los datos en la segunda base de datos pero si de la primera.
pero si al final de la primer centencia de la primer base de datos le agrego un else.
if (alta1==1){
}else{
si me permite modificar la segunda base de datos y la primera.
pero ahora si pongo else en las demas no.
la verdad ya nose como hacer.
Sube tu código
Es dificil hacer un debug de este código, esta de mas decir que lo que estas haciendo no es para nada recomendable por motivos de seguridad y en casos de mantenibilidad ni hablar, lo que te recomiendo es que subas tu código a algun repositorio de github , para que los cientificos locos de javamexico podamos darle una manita de gato a eso, creo que deberias leer muchos libros ya que a futuro si alguien tiene que mantener eso pensará que odiabas al mundo.
Ademas un modelo de base de datos nunca deberia tener tablas como alta1, alta2 y alta3, si tienes algo como eso quiere decir que estas normalizando mal tu modelo, si tu modelo esta mal , todo lo de mas se vuelve fragil, muy propenso a errores y no resistente a cambios.
es la forma que me enseñaron
es la forma que me enseñaron de trabajar con bases dedatos.
se que estoy muy verde con el asunto de java, ya que soy muy nob estoy empesando todo esto.
lo que no entiendo el por que metad del codigo si anda y la otra mitad no. y la unica diferencia es un else
Sube el proyecto y lo revisaré este fin de semana
Sube el proyecto y lo revisaré este fin de semana, debe haber un error lógico, puede que el error esté ahí y no lo veas, por eso es bueno que una persona ajena le de una mirada.
Otra pregunta, ya debugeaste para asegurar que está ejecutando el statement?
Por ultimo puedes comprimirlo y enviarlo a mi e-mail marcos.roberto.lopez@gmail.com
Saludos.
Hola gracias por responder.
Hola gracias por responder. En un rato te paso el programa. Te aclaro que el programa está echo en eclipce. En el caso que no lo tengas te paso el programa eclipce también.
Mñe
Checa, a lo que se refiere @ezamudio es que deberías tener algo como:
Algo así.
Aquí mis observaciones
He revisado el proyecto que compartiste, aqui mis observaciones.
1. He realizado una consulta a la base de datos, obteniendo los siguientes resultados.
Select * from alta1
id txtpo
3 11
1 12
6 12
7 12
9 20
... ...
Tienes más de un registro con txtpo=12
2. En la siguiente porción del código fuente
El metodo executeUpdate te retorna un contador de las filas que fueron afectadas, cómo en la base de datos tienes 3 registros con txtpo=12, entonces alta=3 cuando ejecutas la query para txtpo=12. En este caso no se cumple if(alta == 1) y por lo tanto no se ejecutan las otras queries.
Recomendaciones
1. El campo txtpo debería ser unico en la base de datos
2. Cambia la condicion if(alta == 1) por if(alta > 0)
Roberto Lopez
hola gracias por responder,
hola gracias por responder, pero le soy sincero no les entiendo a que se refieren.
soy muy nuevo en esto, el curso que ice de java lo ice atraves del municipio y solo duro 2 meses
Lee este libro cuando tengas tiempo