Guardar varios registros simultaneamente java mysql

Publicado por ame5577, 01 Abril de 2022, 16:05

Tema anterior - Siguiente tema

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

ame5577

Querida Comunidad un gusto saludarlos, estoy leendo varios registros tipo HoldinRegister para eso estoy usando easymodbus en total seran 150 registros que se deben leer y guardar cada vez que un registro tipo Coil cambia de 0 a 1, la lectura de estos registros se hace de la siguiente manera:

public static void main(String[] args) throws Exception
	{
		ModbusClient modbusClient = new ModbusClient();
		modbusClient.Connect("127.0.0.1", 502);
		int[] inputRegisters = modbusClient.ReadHoldingRegisters(0, 149);
		for (int i=0; i < inputRegisters.length; i++)
			System.out.println("Holding Register  #"+i+": "+inputRegisters[i]);
	}


Los valores de los registros se actualizan solamente al momento que el Coil cambia su valor, luego guarda esos registros en la base de datos, creo que esto es mejor ya que si estarian actualizando todo el tiempo consumiria demasiados recursos.

Mi pregunta ahora es como puedo hacer para guardar esa cantidad de datos al mismo tiempo, buscando por la red encontre un ejemplo usando FOR pero no entiendo muy bien como integrarlo ya que no consigo hacerlo funcionar.

String SQL = "INSERT INTO ingredients(date,regnumb,regval)"
        + "values (?,?,?)";

        mensaje="data inserted correctly";
        try{
            PreparedStatement sqls = (PreparedStatement) conn.prepareStatement(SQL);
           
            int rows =4;
         
                 
            for(int i = 0; i
            sqls.setString(1, date);
            sqls.setString(2, regnumb);          
            sqls.setString(5, regval);
            sqls.addBatch();
  }
sqls.executeBatch();



Desde ya les agradezco su gentil atencion.

Saludos.

Rock Lee

#1
Puede ser mas practico hacerlo con un while y forzarlo a salir aunque ¿porque 150 veces? ... tendrias hacer un for externo para que una vez pase esas 150 veces lo saque, con un control si tiene volver hacerlo aunque no estoy seguro esto dispara el consumo. Ahora estoy desde mi celular pero capas podria funcionar algo como:

public static void main(String[] args) throws Exception {
	StringSQL = "INSERT INTO ingredients(date,regnumb,regval)" + "values (?,?,?)";
		try{   
			PreparedStatement sqls = (PreparedStatement) conn.prepareStatement(SQL);
			int rows =4;
			for(int i = 0; i
				sqls.setString(1, date);
				sqls.setString(2, regnumb);          
				sqls.setString(5, regval);
				sqls.addBatch(
								ModbusClient modbusClient = new ModbusClient();
								modbusClient.Connect("127.0.0.1", 502);
								int[] inputRegisters = modbusClient.ReadHoldingRegisters(0, 149);
									for (int i=0; i < inputRegisters.length; i++)
										System.out.println("Holding Register  #"+i+": "+inputRegisters[i]);
								);
	}
	sqls.executeBatch();
}


No tener un editor complica pero puede te de una idea... pero la idea tiene ser compruebe la base de datos antes del recursivo de 150 pero como dije capas con un while lo sacas antes tenga volver a correr.


Saludos Familia!

Temas Similares (5)