Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

guardar datos de JTable a MYSQL

  • 12 Respuestas
  • 2576 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Este post tiene marcado una respuesta como solución Presiona acá para verlo

Desconectado REMHINOB

  • *
  • Underc0der
  • Mensajes: 24
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« en: Abril 22, 2019, 02:09:27 pm »
Hola Amigos otra vez yo, estoy modificando codigo de mi sistema para optimizarlo, ahora tengo un tabla con datos que deseo guardar en la base de datos, lo normal es hacer un bucle e ir guardando registro a registro abriendo y cerrando conexiones, quiero evitar esto asi que hice el siguiente codigo el cual crea una sentencia unica y posteriormente guardarlo:

evento= new Clases.Eventos();
        String sql="";
        for(int y=0;y<tbDespacho.getRowCount();y++){
            idmaterial=tbDespacho.getValueAt(y, 0)+"";//extraemos el codigo de material
            String stockactual=tbDespacho.getValueAt(y, 4)+""; //Extraemos el stock actual
            sql= sql + "Update base_material set stock_material= '"+stockactual+"' where id_material= '"+idmaterial+"';\n";
        }
        try{
            System.out.println(sql);
            evento.GuardaDatos(sql);
            System.out.println("Stock Descontado");
        }catch(Exception e){
            System.out.println(e);
        }
 el codigo sql que genero al realizar el bucle fue este:

Update base_material set stock_material= '198.0' where id_material= '01010030004';
Update base_material set stock_material= '693.0' where id_material= '01010050015';
Update base_material set stock_material= '850.0' where id_material= '01010060001';

Al intentar guardar esa consulta me genera un error en la sintaxis, probe con salto de linea e igual. Me pueden ayudar por favor?? gracias de antemano
la clase evento.GuardarDatos es simplemente conectarse a la base de datos y ejecutar la sentencia sql,
« Última modificación: Abril 22, 2019, 02:38:58 pm por Gabriela »

Desconectado rommel360

  • *
  • Underc0der
  • Mensajes: 37
  • Actividad:
    5%
  • Reputación 1
    • Ver Perfil
« Respuesta #1 en: Abril 22, 2019, 04:49:58 pm »
yo utilizo Vectores. recorro la tabla y lo guardo en una Matriz de Vector (creo q un ArrayList tambien debe de funcionar).

luego esa matriz vector la envio a la funcion que se encargara de actualizar los datos. Luego recorre ese Vector y lo voy ejecutando la sentencia SQL  Update.

parecido a lo que haces en el for

Update base_material set stock_material= '"+stockactual+"' where id_material= '"+idmaterial+"';

Desconectado rommel360

  • *
  • Underc0der
  • Mensajes: 37
  • Actividad:
    5%
  • Reputación 1
    • Ver Perfil
« Respuesta #2 en: Abril 22, 2019, 04:58:18 pm »
y creo que tu error es por que la variable sql es igual a

todo esto junto

sql=Update base_material set stock_material= '198.0' where id_material= '01010030004';
Update base_material set stock_material= '693.0' where id_material= '01010050015';
Update base_material set stock_material= '850.0' where id_material= '01010060001';

y a la hora de hacer el update con esta variable pos como vez, estas enviando como un todo y no un Update por Update.

a si que lo que tendrias que hacer ahora es dividir esa cadena con la funcion Split(";"). //puse ; por q vi que es lo que comparten los 3 updates y quiero que donde encuentre un ; los separe a si podremos tener todo la sentencia update completa .
Update base_material set stock_material= '850.0' where id_material= '01010060001',
Update base_material set stock_material= '693.0' where id_material= '01010050015',
Update base_material set stock_material= '850.0' where id_material= '01010060001'

algo asi sql.split(";") esto te regresaria un arreglo de 3 posiciones en donde en cada posicion estaria ahora si un update.

ejemplo

String updates[] = sql.split(";")

ahora lo podrias meter en un for

for(int indice=0;indice < updates.length;indice++)
{
ejecuta la setencia update que esta en la posicion updates[indice];
}

Desconectado Solid Water

  • *
  • Underc0der
  • Mensajes: 112
  • Actividad:
    1.67%
  • Reputación 5
  • (:{
    • Ver Perfil
« Respuesta #3 en: Abril 22, 2019, 05:12:23 pm »
Estas seguro que el id es un alfanúmerico y no un int?
por que lo pones entre comillas simples.

Prueba conectarte a mysql por la consola y realizar un update a mano a ver si es correcto.

mysql -u root -p

En linux.
suponiendo que tu usario de mysql es root.

Saludos,
« Última modificación: Abril 22, 2019, 05:42:19 pm por Solid Water »



Desconectado REMHINOB

  • *
  • Underc0der
  • Mensajes: 24
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #4 en: Abril 23, 2019, 08:51:02 am »
Gracias a todos por responder, rommel360, gracias por tu respuesta, esta bien pero lo que quiero es evitar un bucle que se abra y se cierre las conexiones para realizar la actualizacion registro a registro, lo que pense en crear en una sola sentencia (concatenar los updates) y al final solo abrir una conexion y actualizar todo es una vez, se puede hacer eso??? o necesariamente tengo que ir actualizando registro a registro,?? esto es porque estoy trabajando con un hosting y servidor mysql remoto y lei que se tiene que evitar abrir y cerrar demasiadas conexiones para no hacer lento el sistema,

Desconectado Solid Water

  • *
  • Underc0der
  • Mensajes: 112
  • Actividad:
    1.67%
  • Reputación 5
  • (:{
    • Ver Perfil
« Respuesta #5 en: Abril 23, 2019, 12:16:10 pm »
Me confunde un poco lo que dices de
Citar
la clase evento.GuardarDatos es simplemente conectarse a la base de datos y ejecutar la sentencia sql.
La clase o el método?
Por que luego dices:
Citar
esta bien pero lo que quiero es evitar un bucle que se abra y se cierre las conexiones

Verdad que tienes tu objeto conexion como static y lo reutilizas y no abres y cierras la conexion por cada consulta no?



Desconectado REMHINOB

  • *
  • Underc0der
  • Mensajes: 24
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #6 en: Abril 23, 2019, 09:01:24 pm »
Me confunde un poco lo que dices de
Citar
la clase evento.GuardarDatos es simplemente conectarse a la base de datos y ejecutar la sentencia sql.
La clase o el método?
Por que luego dices:
Citar
esta bien pero lo que quiero es evitar un bucle que se abra y se cierre las conexiones

Verdad que tienes tu objeto conexion como static y lo reutilizas y no abres y cierras la conexion por cada consulta no?


carambas, mira soy nuevo en esto, me puedes dar un link o un ejemplo respecto a reutilizacion de conexiones, gracias de antemano

Marcado como mejor respuesta por: REMHINOB en Mayo 11, 2019, 08:48:11 am

Desconectado Solid Water

  • *
  • Underc0der
  • Mensajes: 112
  • Actividad:
    1.67%
  • Reputación 5
  • (:{
    • Ver Perfil
« Respuesta #7 en: Abril 24, 2019, 09:20:19 am »
Un ejemplo sería algo así:

Código: Java
  1. public static class Querys
  2. {
  3.     public static Connection conn;
  4.  
  5.     public static void CreaConexion() {
  6.        /*ACA creas la conexion al objeto conn que declaraste arriba*/
  7.    }
  8.  
  9. }

Haces al comienzo del programa el Querys.CreaConexion() (getConnection al objecto statico), y luego reutilizas siempre ese objeto, en lugar de crearlo nuevamente y conectarlo.
Las clases staticas pueden ser accedidas sin ser instanciadas, tanto sus métodos como sus datos miembros públicos.
El objeto conexion statico mantendrá sus propiedades a lo largo del programa podrás llamarlo desde cualquier formulario.

Al principio del programa:

Querys.CreaConexion();

Querys.conn para usar el objeto desde cualquier formulario.

Recuerda que no tienes que hacerle un new a la clase Querys para crear el objeto, no debes instanciar la clase, llamas al método como nombreDeClase.Funcion();      (  Querys.CreaConexion();  )

Saludos, cualquier problema consulta.
« Última modificación: Abril 24, 2019, 02:36:22 pm por Solid Water »



Desconectado REMHINOB

  • *
  • Underc0der
  • Mensajes: 24
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #8 en: Mayo 11, 2019, 08:18:05 am »
Un ejemplo sería algo así:

Código: Java
  1. public static class Querys
  2. {
  3.     public static Connection conn;
  4.  
  5.     public static void CreaConexion() {
  6.        /*ACA creas la conexion al objeto conn que declaraste arriba*/
  7.    }
  8.  
  9. }

Haces al comienzo del programa el Querys.CreaConexion() (getConnection al objecto statico), y luego reutilizas siempre ese objeto, en lugar de crearlo nuevamente y conectarlo.
Las clases staticas pueden ser accedidas sin ser instanciadas, tanto sus métodos como sus datos miembros públicos.
El objeto conexion statico mantendrá sus propiedades a lo largo del programa podrás llamarlo desde cualquier formulario.

Al principio del programa:

Querys.CreaConexion();

Querys.conn para usar el objeto desde cualquier formulario.

Recuerda que no tienes que hacerle un new a la clase Querys para crear el objeto, no debes instanciar la clase, llamas al método como nombreDeClase.Funcion();      (  Querys.CreaConexion();  )

Saludos, cualquier problema consulta.

Hola SW gracias por responder, sin caer pesado, me podrias dar mas alcancer de como seria la clase "Querys", gracias otra vez

Desconectado REMHINOB

  • *
  • Underc0der
  • Mensajes: 24
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #9 en: Mayo 11, 2019, 09:04:16 am »
SW esta es la imagen de mi clase conexion, cambie lineas basandome en tu ejemplo y conecta, me esta volviendo loco,


https://ibb.co/cFnXY7Y

Aqui mi Clase gestion con el cual guardo y extraigo datos de mi BD


https://ibb.co/m4Cbyqn

Al ejecutar el sistema me sale error, si me puedes dar una mano por favor, gracias
Gracias
« Última modificación: Mayo 11, 2019, 09:44:57 am por REMHINOB »

Desconectado Solid Water

  • *
  • Underc0der
  • Mensajes: 112
  • Actividad:
    1.67%
  • Reputación 5
  • (:{
    • Ver Perfil
« Respuesta #10 en: Mayo 11, 2019, 05:41:11 pm »
Hola, lo que yo veo en tu code es que:

tienes una public class conexion y adentro tienes el objecto static connection.

Luego en GestionDatos, dices que la variable llamada "conexion" será del tipo conexion.

y luego la utilizas así:

conexion.getConnection();

Pero en ningún momento hiciste el conexion = new conexion(); no instanciaste la clase ni la definiste como static para usar sus metodos sin instanciarla, nunca llamaste a su constructor por lo que tampoco nunca se creo la conexion que luego quieras preparar statement, por lo que creo que si el problema es ese, tienes 2 caminos: o declaras la clase  conexion y todos sus métodos como static y no usas un objeto si no que puedes llamar sus metodos directamente con el nombre de la clase, o le haces un new para instanciar el objeto el cual llamará al constructor y se creará la conexion.

La otra sería que hayas instanciado conexion usando this.conexion = new conexion(); en alguna parte de la clase GestionDatos que no me mostraste el code, por eso siempre hay que intentar mostrar todo lo que se pueda.

Saludos,



Desconectado Solid Water

  • *
  • Underc0der
  • Mensajes: 112
  • Actividad:
    1.67%
  • Reputación 5
  • (:{
    • Ver Perfil
« Respuesta #11 en: Mayo 11, 2019, 05:57:56 pm »
Prueba acá a donde declaras Conexion conexion:



poner Conexion conexion = new Conexion();

Saludos,



Desconectado REMHINOB

  • *
  • Underc0der
  • Mensajes: 24
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #12 en: Mayo 14, 2019, 11:34:23 am »
Prueba acá a donde declaras Conexion conexion:



poner Conexion conexion = new Conexion();

Saludos,

SOLIDW una pregunta, mira al crear una clase conexion estatica como en la imagen y al crear una clase actualizar datos el cual llamaria a la clase conexion, pero si tengo datos en una jtable y quiero leer los datos de ese Jtable y actulizar los valores en  una tabla de mysql tendria que crear un bucle con for(){} que me recorra la tabla y actulize los datos, ahora mi pregunta es como serian las lineas de la clase actualizar para no ir abriendo y cerrando conexiones con cada registro actualizado?? gracias

 

¿Te gustó el post? COMPARTILO!



[DUDA] - ¿Cómo puedo sacar el valor de una base de datos para hacer operaciones?

Iniciado por Zwikep

Respuestas: 0
Vistas: 1170
Último mensaje Marzo 18, 2018, 07:52:48 am
por Zwikep
[AYUDA] dbforge error creando relaciones en la base de datos, sale: (errno: 150)

Iniciado por graphixx

Respuestas: 1
Vistas: 2161
Último mensaje Agosto 30, 2014, 09:53:26 pm
por Cl0udswX
[SOLUCIONADO] ¿Cómo recibir y mandar datos desde Android a la PC c/programación?

Iniciado por proxy_lainux

Respuestas: 5
Vistas: 4017
Último mensaje Enero 03, 2015, 03:12:47 pm
por WhiZ
[SOLUCIONADO] SQLi - Obtener datos a través de formulario login

Iniciado por sandwich

Respuestas: 8
Vistas: 2998
Último mensaje Noviembre 13, 2015, 03:30:05 pm
por EPSILON
[SOLUCIONADO]¿Cómo puedo recuperar datos de un disco duro?

Iniciado por forroble86

Respuestas: 6
Vistas: 2453
Último mensaje Junio 25, 2016, 07:08:35 am
por blackdrake