Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Problema al insertar datos de un jTable a Mysql

Hola a todos.
Estoy teniendo problemas al para insertar todo el contenido de un jTable en una tabla Mysql, lo curioso es que al usar System.out.println me lee todo el contenido, tengo más de una semana tratando de resolver este inconveniente pero no he logrado dar con la solución.
Agradecería enormemente si alguien se apiada de mí y me ayuda a dar con una solución.
Desde ya muchas gracias.
Estoy utilizando Netbeans y este es el código que uso:

if (txtcliente.getText().trim().length() == 0) {
JOptionPane.showMessageDialog(this, "El nombre del cliente es obligatorio");
} else if (txtcod.getText().trim().length() == 0) {
JOptionPane.showMessageDialog(this, "El código del producto es obligatorio");
} else if (txtprod.getText().trim().length() == 0) {
JOptionPane.showMessageDialog(this, "El nombre del producto es obligatorio");
} else if (txtimporte.getText().trim().length() == 0) {
JOptionPane.showMessageDialog(this, "El valor del importe es obligatorio");
} else if (txtpagar.getText().trim().length() == 0) {
JOptionPane.showMessageDialog(this, "Debe calcular la venta antes de registrarla");

} else if (Integer.parseInt(txtpagar.getText()) < Integer.parseInt(txtsub.getText())) {
JOptionPane.showMessageDialog(this, "Hay un error de cálculo!, Presione el botón calcular otra vez");

} else if (Integer.parseInt(txtimporte.getText()) >= Integer.parseInt(txtpagar.getText())) {
txtimporte.setBackground(Color.black);

if (tbproducto.getRowCount() == 0) {
JOptionPane.showMessageDialog(null, "No hay ningun producto en la lista!");

} else {
String ofic, fec, time, cliente, sub, itbis, desc, pag, importe, camb, usu;
String venta, idp, cod, prod, precio, cant, total;
String sql = "";
String sqlp = "";
conectar cc = new conectar();
Connection con = cc.conexion();
DefaultTableModel modelo = (DefaultTableModel) tbproducto.getModel();
int Filas = modelo.getRowCount();

for (int i = 0; i < Filas; i++) {
ofic = txtserie.getText();
venta = txtnumero.getText();
fec = lblfecha.getText();
time = lblHora.getText();
cliente = txtcliente.getText();
idp = (String) tbproducto.getValueAt(i, 0);
cant = (String) tbproducto.getValueAt(i, 1);
cod = (String) tbproducto.getValueAt(i, 2);
prod = (String) tbproducto.getValueAt(i, 3);
precio = (String) tbproducto.getValueAt(i, 4);
total = (String) tbproducto.getValueAt(i, 5);

sub = txtsub.getText();
itbis = txtitbis.getText();
desc = txtdesc.getText();
pag = txtpagar.getText();
importe = txtimporte.getText();
camb = txtcambio.getText();
usu = lblusu.getText();

sql = "INSERT INTO reg_venta (oficina, fecha, hora, cliente, subtotal, itbis, descuento, total, importe, cambio, usuario) VALUES (?,?,?,?,?,?,?,?,?,?,?)";
sqlp = "INSERT INTO detalle_venta (n_venta, idproducto, cantidad, codigo, producto, precio_und, total) VALUES (?,?,?,?,?,?,?)";

try {
PreparedStatement pst = con.prepareStatement(sql);
pst.setString(1, ofic);
pst.setString(2, fec);
pst.setString(3, time);
pst.setString(4, cliente);
pst.setString(5, sub);
pst.setString(6, itbis);
pst.setString(7, desc);
pst.setString(8, pag);
pst.setString(9, importe);
pst.setString(10, camb);
pst.setString(11, usu);

PreparedStatement pstp = con.prepareStatement(sqlp);
pstp.setString(1, venta);
pstp.setString(2, idp);
pstp.setString(3, cant);
pstp.setString(4, cod);
pstp.setString(5, prod);
pstp.setString(6, precio);
pstp.setString(7, total);

int t = pst.executeUpdate();
int tp = pstp.executeUpdate();
if (t > 0) {
if (tp > 0) {

if (JOptionPane.showConfirmDialog(rootPane, "La venta se ha registrado, desea imprimir la factura?",
"Imprimir", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
try {

String reporte = "src/Reportes/Factura.jasper";
Map parametro = new HashMap();
parametro.put("numero", txtnumero.getText());

JasperPrint jprint = JasperFillManager.fillReport(reporte, parametro, cc.conectar);
JasperViewer.viewReport(jprint, false);

} catch (JRException ex) {
JOptionPane.showMessageDialog(null, "Error al generar la factura");
Logger.getLogger(Ventas.class.getName()).log(Level.SEVERE, null, ex);
}

}

limpiarV();
generarSerie();
txtimporte.setBackground(Color.black);

}
}

} catch (SQLException ex) {
Logger.getLogger(Ventas.class.getName()).log(Level.SEVERE, null, ex);
}

}
}

} else {
JOptionPane.showMessageDialog(null, "El importe recibido es menor a la cantidad a pagar");
txtimporte.setBackground(Color.red);
new V_Importe(this, true).setVisible(true);

}

julio 4, 2016 | Registered Commenteralbcons

Olvidé mencionar que el primer insert se ejecuta perfectamente pero el segundo insert a la tabla detalle solo me inserta la primera fila del jTable.

julio 4, 2016 | Unregistered Commenteralbcons

¿Has mirado la excepción SQL que te lance?. Porque da la impresión de que intentas hacer un INSERT con clave primaria duplicada.

julio 4, 2016 | Registered Commenterchoces

Hola choces mil gracias por ayudarme.
No me lanza ningún error al parecer todo se ejecuta bien, y no, no hay llaves primarias duplicadas de hecho el "n_venta" lo pongo en un jTextField con un select max id y desde este lo tomo para enviarlo a la tabla "detalle_venta" si te fija bien podrá ver que el "n_venta" solo lo envío a detalle ya que en "reg_venta" se autogenera con un id autoincrementable.

Otra vez gracias viejo espero me ayude con esto, ya me estoy volviendo loco casi literalmente.

julio 4, 2016 | Registered Commenteralbcons