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
http://subefotos.com/ver/?5d5bf432cfa1ac6a5c4bf5716f060ab4o.png
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.

btnInicio.setForeground(Color.RED);
btnInicio.setFont(new Font("Tahoma", Font.BOLD | Font.ITALIC, 16));
btnInicio.setBounds(859, 296, 121, 29);
contentPane.add(btnInicio);

JButton button_1 = new JButton("Modificar");
button_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
try {
Connection conexion = DB.conectarA("C:/ultramed/ultramed.db");
Statement comando=conexion.createStatement();
int alta1 = comando.executeUpdate("update alta1 set txtap1='" + txtap1.getText() + "' , txtno1='" + txtno1.getText() + "' , txtfn1='" + txtfn1.getText() + "', con1='" + con1.getSelectedItem() + "' , txtd1='" + txtd1.getText() + "' , txtna='" +txtna.getText() + "' , txtcp='" + txtcp.getText() + "' ,txtoc='" + txtoc.getText() + "' , txtlo='" + txtlo.getText() + "' ,txtdo='" + txtdo.getText() + "' ,txtn='" + txtn.getText() + "' ,txtdp='" + txtdp.getText() + "' ,txtba='" + txtba.getText() + "' ,txttel='" + txttel.getText() + "' ,txtg='" + txtg.getText() + "' ,txtemail='" + txtemail.getText() + "',conp='" + conp.getSelectedItem() + "',txtcu='" + txtcu.getText() + "',alt1='" + alt1.getSelectedItem() + "' where txtpo="+txtpo.getText());
if (alta1==1) {
}else{
int alta2 = comando.executeUpdate("update alta2 set txtap2='" + txtap2.getText() + "', txtno2='" + txtno2.getText() + "', txtfn2='" + txtfn2 .getText() + "', com2='" + com2.getSelectedItem() + "' , txtd2='" + txtd2.getText() + "' ,alt2='" + alt2.getSelectedItem() + "' where txtpo2="+txtpo.getText());
if (alta2==1) {

int alta3 = comando.executeUpdate("update alta3 set txtap3='" + txtap3.getText() + "', txtno3='" + txtno3.getText() + "', txtfn3='" + txtfn3 .getText() + "', com3='" + com3.getSelectedItem() + "' , txtd3='" + txtd3.getText() + "' ,alt3='" + alt3.getSelectedItem() + "' where txtpo3="+txtpo.getText());
if (alta3==1) {
int alta4 = comando.executeUpdate("update alta4 set txtap4='" + txtap4.getText() + "', txtno4='" + txtno4 .getText() + "', txtfn4='" + txtfn4 .getText() + "', com4='" + com4.getSelectedItem() + "' , txtd4='" + txtd4.getText() + "' ,alt4='" + alt4.getSelectedItem() + "' where txtpo4="+txtpo.getText());
if (alta4==1) {
int alta5 = comando.executeUpdate("update alta5 set txtap5='" + txtap5.getText() + "', txtno5='" + txtno5 .getText() + "', txtfn5='" + txtfn5 .getText() + "', com5='" + com5.getSelectedItem() + "' , txtd5='" + txtd5.getText() + "' ,alt5='" + alt5.getSelectedItem() + "' where txtpo5="+txtpo.getText());
if (alta5==1) {
int alta6 = comando.executeUpdate("update alta6 set txtap6='" + txtap6.getText() + "', txtno6='" + txtno6 .getText() + "', txtfn6='" + txtfn6 .getText() + "', com6='" + com6.getSelectedItem() + "' , txtd6='" + txtd6.getText() + "' ,alt6='" + alt6.getSelectedItem() + "' where txtpo6="+txtpo.getText());
if (alta6==1) {
int alta7 = comando.executeUpdate("update alta7 set txtap7='" + txtap7.getText() + "', txtno7='" + txtno7 .getText() + "', txtfn7='" + txtfn7 .getText() + "', com7='" + com7.getSelectedItem() + "' , txtd7='" + txtd7.getText() + "' ,alt7='" + alt7.getSelectedItem() + "' where txtpo7="+txtpo.getText());
if (alta7==1) {
}
}
}
}
}
}
}JOptionPane.showMessageDialog(null,"El cliente fue modificado");

}
catch(SQLException e){
e.printStackTrace();
}
}
});
button_1.setForeground(Color.RED);
button_1.setFont(new Font("Tahoma", Font.BOLD | Font.ITALIC, 16));
button_1.setBounds(704, 296, 121, 29);
contentPane.add(button_1);
}
}

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

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:

'; DROP TABLE alta1; --

Y dile adiós a tu tabla alta1.

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.

Imagen de muskafly

Formato Codigo

Utiliza PreparedStaments y por favor agrega tu codigo entre tags   para que lo podamos leer mejor.

Imagen de ezamudio

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.

try {
                                        Connection conexion = DB.conectarA("C:/ultramed/ultramed.db");
                                 Statement comando=conexion.createStatement();
                int alta1 = comando.executeUpdate("update alta1 set  txtap1='" + txtap1.getText() + "' , txtno1='" + txtno1.getText() + "' , txtfn1='" + txtfn1.getText() + "', con1='" + con1.getSelectedItem() + "' , txtd1='" + txtd1.getText() + "' , txtna='" +txtna.getText() + "' , txtcp='" + txtcp.getText() + "' ,txtoc='" + txtoc.getText() + "' , txtlo='" + txtlo.getText() + "' ,txtdo='" + txtdo.getText() + "' ,txtn='" + txtn.getText() + "' ,txtdp='" + txtdp.getText() + "' ,txtba='" + txtba.getText() + "' ,txttel='" + txttel.getText() + "' ,txtg='" + txtg.getText() + "' ,txtemail='" + txtemail.getText() + "',conp='" + conp.getSelectedItem() + "',txtcu='" + txtcu.getText() + "',alt1='" + alt1.getSelectedItem() + "'  where txtpo="+txtpo.getText());
                  if (alta1==1) {
                  }else{
                          int alta2 = comando.executeUpdate("update alta2 set  txtap2='" + txtap2.getText() + "', txtno2='" + txtno2.getText() + "', txtfn2='" + txtfn2 .getText() + "', com2='" + com2.getSelectedItem() + "' , txtd2='" + txtd2.getText() + "' ,alt2='" + alt2.getSelectedItem() + "' where txtpo2="+txtpo.getText());
                          if (alta1==2) {
Imagen de muskafly

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.

Imagen de ezamudio

SQL concatenado

Sigues concatenando SQL. Tienes que arreglar eso, de verdad.

PreparedStatement st = conexion.prepareStatement("UPDATE tabla SET col1=?, col2=?, col3=? WHERE llave=?");
st.setString(1, "valor 1");
st.setTimestamp(2, timestamp2);
st.setBigDecimal(3, decimal3);
st.setLong(4, llave);
st.executeUpdate();

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.

Connection conexion = DB.conectarA("C:/ultramed/ultramed.db");
Statement comando=conexion.createStatement();
int alta1 = comando.executeUpdate("update alta1 set txtap1='" + txtap1.getText() + "' , txtno1='" + txtno1.getText() + "' , txtfn1='" + txtfn1.getText() + "', con1='" + con1.getSelectedItem() + "' , txtd1='" + txtd1.getText() + "' , txtna='" +txtna.getText() + "' , txtcp='" + txtcp.getText() + "' ,txtoc='" + txtoc.getText() + "' , txtlo='" + txtlo.getText() + "' ,txtdo='" + txtdo.getText() + "' ,txtn='" + txtn.getText() + "' ,txtdp='" + txtdp.getText() + "' ,txtba='" + txtba.getText() + "' ,txttel='" + txttel.getText() + "' ,txtg='" + txtg.getText() + "' ,txtemail='" + txtemail.getText() + "',conp='" + conp.getSelectedItem() + "',txtcu='" + txtcu.getText() + "',alt1='" + alt1.getSelectedItem() + "' where txtpo="+txtpo.getText());
if (alta1==1) {

int alta2 = comando.executeUpdate("update alta2 set txtap2='" + txtap2.getText() + "', txtno2='" + txtno2.getText() + "', txtfn2='" + txtfn2 .getText() + "', com2='" + com2.getSelectedItem() + "' , txtd2='" + txtd2.getText() + "' ,alt2='" + alt2.getSelectedItem() + "' where txtpo2="+txtpo.getText());
if (alta2==1

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.

Imagen de neko069

Mñe

Checa, a lo que se refiere @ezamudio es que deberías tener algo como:

Connection conexion = DB.conectarA("C:/ultramed/ultramed.db");
PreparedStatement st = conexion.prepareStatement("UPDATE tabla SET col1=?, col2=?, col3=? WHERE llave=?");
st.setString(1, txt1.getText());
st.setString(2, txt2.getText());
st.setString(3, txt3.getText());
st.setString(4, txt4.getText());
int actualizado = st.executeUpdate(); //aqui ya tienes el valor de cuantos registros se actualizan
System.out.println("el actualizado es " + actualizado); //que numero te trae

if(actualizado >0){ //porque, en realidad te devuelve un 1? no te regresara mas registros? o
// de plano te regresa un cero, en cuyo caso primero comprueba tu primer insercion

    PreparedStatement otrost = conexion.prepareStatement("UPDATE tabla2 SET col1=?, col2=?, col3=? WHERE llave=?");
    otrost.setString(1, txt1.getText());
    otrost.setString(2, txt2.getText());
    otrost.setString(3, txt3.getText());
    otrost.setString(4, txt4.getText());
     int otroActualizado = otrost.executeUpdate();

// aqui ya tienes el oootro valor que bien deberias, como ultraminimo, pintarlo en pantalla para ver que numero te arroja
    System.out.println("el otro actualizado es " + otroActualizado);

  // cierras prepared statement
}

//cierras prepared statement, y connection

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

int alta1 = comando.executeUpdate("update alta1 set  txtap1 ... where txtpo="+txtpo.getText());
if (alta1==1) {
   //continuas con las otras queries
}

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
http://marcosrobertos.blogspot.cl/

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