Java - Java Guardar el resultado de bucle FOR en una tabla de Base de Datos

 
Vista:

Java Guardar el resultado de bucle FOR en una tabla de Base de Datos

Publicado por Ame Bravo A. (1 intervención) el 27/08/2022 00:03:17
Estimada comunidad, tengo este codigo que me genera datos desde 0 hasta 124:

1
2
3
4
5
6
7
8
9
10
11
12
13
import de.re.easymodbus.modbusclient.ModbusClient;
 
public class Run {
 
    public static void main(String[] args) throws Exception {
        ModbusClient modbusClient = new ModbusClient();
        modbusClient.Connect("192.168.5.1", 502);
        int[] inputRegisters = modbusClient.ReadHoldingRegisters(0, 125);
        for (int i = 0; i < inputRegisters.length; i++) {
            System.out.println("Data Holding Register # " + i + ": " + inputRegisters[i]);
        }
    }
}


Debo guardar esos 124 datos en una tabla de base de datos, por favor podrian indicarme si esto es posible y donde puedo encontrar informacion sobre como hacerlo?

Agradezco su gentil atencion.

Saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Java Guardar el resultado de bucle FOR en una tabla de Base de Datos

Publicado por adivino (6 intervenciones) el 27/08/2022 02:27:41
Si por supuesto que lo puedes hacer.

Basta que elijas la base de datos, donde crees una estructura adecuada para almacenar el valor.

Vinculas la librería de la BD a utilizar y grabas.

Eso sí, yo no te recomendaría que grabaras de a valor, pues son 124 idas a la BD por cada uno de los valores, te recomendaría que mandes todo en un string, separado por algún carácter puede ser una coma, y allá en la BD te creas un procedimiento almacenado, que recorra ese string, y extraiga los 124 valores, así solo haces un viaje a la BD.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Java Guardar el resultado de bucle FOR en una tabla de Base de Datos

Publicado por adivino (6 intervenciones) el 27/08/2022 17:23:46
Bien Ame, puedes hacer algo como esto:

Podrías probar a descargar la base de datos: MariaDB de:

https://mariadb.org/

Una vez instalada, creas una tabla y un procedimiento almacenado así:

CREATE DATABASE pruebabd CHARACTER SET utf8 COLLATE utf8_general_ci;

CREATE TABLE mivalor (
valor_id int(11) NOT NULL AUTO_INCREMENT,
valor int(11) DEFAULT NULL,
PRIMARY KEY (valor_id)
) ENGINE=InnoDB AUTO_INCREMENT=60377 DEFAULT CHARSET=utf8mb4;

CREATE PROCEDURE pruebabd.GrabarValor(
IN p_Valores varchar(1000))
BEGIN
DECLARE _next varchar(50) DEFAULT NULL;
DECLARE _nextlen INT DEFAULT NULL;

iterator: WHILE (LENGTH(TRIM(p_Valores)) > 0) DO

IF LENGTH(TRIM(p_Valores)) = 0 OR p_Valores IS NULL THEN
LEAVE iterator;
END IF;
SET _next = SUBSTRING_INDEX(p_Valores, ',', 1);
SET _nextlen = LENGTH(_next);

START TRANSACTION;
INSERT INTO mivalor (valor)
VALUES (TRIM(_next));
COMMIT;
SET p_Valores = INSERT(p_Valores,1,_nextlen + 1,'');
END WHILE;
END;

Ahora en Java hace lo siguiente:

Al inicio donde se importan las librerías, vincula estas:

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;

Luego en el main donde usted tiene el for define una variable para capturar los valores que arroja ese for así:

String cadenaValores = "";
int[] inputRegisters = modbusClient.ReadHoldingRegisters(0, 125);
for (int i = 0; i < inputRegisters.length; i++) {
System.out.println("Data Holding Register # " + i + ": " + inputRegisters[i]);
cadenaValores = cadenaValores + inputRegisters[i] + ",";
}

// Ahora vamos a grabar los valores de ese ciclo en una BD
Connection conn = null;
try
{
Class.forName("org.mariadb.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mariadb://localhost/pruebabd","root","root");
CallableStatement stmt = conn.prepareCall("{CALL GrabarValor(?)}");
stmt.setString(1, cadenaValores);
stmt.executeUpdate();
stmt.close();
conn.close();
}
catch (Exception ex)
{
System.out.println("Error : " +ex);
}

Y esto debería funcionar bien, sin embargo, te aclaro que esto no quedó bien hecho puesto que estoy mezclando todo el código en la clase que tu publicaste, lo adecuado es separar ese acceso a la BD en una clase aparte, pero bueno ya tú te encargas de optimizarlo, y desde luego hay muchas formas de hacerlo, esto no es ni la única ni la mejor.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar