Получите данные из нескольких запросов MySQL и убедитесь, что они хранятся в одной матрице. JAVA

Цель этого - проконсультироваться с двумя компонентами даты. Но потом приходит громоздкая вещь, если можно так сказать.

Во-первых, я делаю запрос, из которого возвращаются данные , который я храню в массиве, и который с теми же данными я использую, чтобы сделать другой запрос, чтобы сделать выбор, я вставляю его в цикл for. Именно здесь будут проводиться многочисленные консультации, и в соответствии с ними я сохраняю их в матрице полученных данных.

Вот моя проблема, потому что нахождение в цикле будет делать необходимые запросы, но я не получаю матрицу для сохранения всех полученных данных, я не говорю, что они плохо их хранят, но находясь в цикле for, матрица получит данные последней итерации, поэтому на матрицу наступают или записываются те же самые предыдущие итерации, что логично, я знаю об этом, но в конце я поняла, что Я закончил делать весь код (извините за мое невежество) .

Я прошу вашей помощи, каким образом вы можете сохранить все данные запросов в соответствии с объемом данных, которые я присоединяю массив-список и которые в конце сохраняются в одной матрице .

Код, который я сделал:

String[] columnasdetalle = {"IDDETCOMPRA", "IDCOMPRA", "IDINSUMO", "NRO FACTURA COMPRA", "INSUMO", "PRECIO", "CANTIDAD"}; // columnas de la tabla
                        ArrayList<String> nrosfacturas = busquedacompra.NroComprasFechas(fecha1, fecha2); // consulta que despues uso sus datos para las multiples consultas
                        int reg = busquedacompra.DevolverRegistros("detallescompras"); // cantidad de filas que tendran
                        Object[][] guardardatos = new Object[reg][columnasdetalle.length]; // length = cantidad de n posiciones que tendran una fila de la matriz
                        for (int i = 0; i < nrosfacturas.size(); i++) {
                            Object[][] datos = busquedacompra.MostrarDatosDetallesComprasNroFactura(nrosfacturas.size(), nrosfacturas.get(i)); // esto es un metedo que utilizo para el llenado de la tabla con los datos obtenidos del array
                            guardardatos = datos;
                            i++; // incremento para saber si hay mas de un dato del array
                            while(nrosfacturas.size() > i) { // si hay mas datos, ahora lo condicion de consulta con el ciclo while
                                datos = busquedacompra.MostrarDatosDetallesComprasNroFactura(nrosfacturas.size(), nrosfacturas.get(i));
                                guardardatos = datos;
                                i++;
                            }
                        }
                        datosdetallecompra = guardardatos; // lo guardo en matriz de tipo Object
                        datosdetalle = new DefaultTableModel(datosdetallecompra, columnasdetalle); // lo guardo en DefaultTableMode
                        jTable2.setModel(datosdetalle);// finalmente se lo incorpora a la tabla con su datos y sus columnas.

Я объясняю, как получить данные из метода ShowDataDetailsShoppingInvoice ():

Сначала загрузите данные из пакета контроллера следующим методом:

public Object[][] MostrarDatosDetallesComprasNroFactura(int reg,String nrofactura) {
        String[] columnas = {"iddetallecompra", "idcompra", "idinsumo", "NroCompra", "descripcion", "Precio", "Cantidad"};
        return sql.DatosDetallesComprasVentas(columnas, reg,"select d.iddetallecompra,c.idcompra,i.idinsumo,c.NroCompra,i.descripcion,d.Precio,d.Cantidad from compras c LEFT JOIN detallescompras d on c.idcompra=d.idcompra LEFT JOIN insumos i on i.idinsumo=d.idinsumo where d.activo=1 and c.NroCompra like '%"+nrofactura+"%' order by c.NroCompra desc");
    }

Затем я использую метод из класса SQL-инъекций, со следующим методом, который я получаю здесь нужные мне данные (здесь будут понятны данные, которые я использовал из предыдущего метода):

public Object[][] DatosDetallesComprasVentas(String colName[], int reg, String sql) {

    Object[][] data = new Object[reg][colName.length];
    Object datos[] = new Object[colName.length];
    try {
        ps = con.conectado().prepareStatement(sql);
        res = ps.executeQuery();
        int s = 0;
        while (res.next()) {
            for (int i = 0; i < colName.length; i++) {
                datos[i] = res.getObject(colName[i]);
                data[s][i] = datos[i];
            }
            s++;
        }
        ps.close();
        res.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return data;
}

Большое спасибо за вашу помощь! У меня есть дни, чтобы я не смог ее решить.

0
задан 27.11.2019, 20:38
1 ответ

В следующей секции кода

for (int i = 0; i < nrosfacturas.size(); i++) {
  Object[][] datos = Busquedacompra.MostrarDatosDetallesComprasNroFactura(nrosfacturas.size(), nrosfacturas.get(i));
  guardardatos = datos; // <-- Aca el error, cada vez que ingresa al for borra los datos anteriores
  i++; 
  while(nrosfacturas.size() > i) { 
    datos = busquedacompra.MostrarDatosDetallesComprasNroFactura(nrosfacturas.size(), nrosfacturas.get(i));
    guardardatos = datos; //Aca igual
    i++;
  }
}

он Был бы должен делать копией array с классом Arrays (Arrays.copyOf или Arrays.copyOfRange) https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html

0
ответ дан 01.12.2019, 10:46
  • 1
    привет isaac! я исследовал два способа копировать и я оставил себе Arrays.copyOf. Я это сделал в моем коде, но результат продолжает быть тем же самым топчутся предыдущие повторения и берут последнего :( не, если я это применяю зло, я показываю это тебе: – Exe Herrera 27.11.2019, 20:30
  • 2
    while (i < nrosfacturas.size()) { Object[][] guardardatos = busquedacompra.MostrarDatosDetallesComprasNroFactura(nrosfacturas.size(), nrosfacturas.get(i)); arraynuevo = Arrays.copyOf(guardardatos, nrosfacturas.size()); i++; } Большое спасибо из-за того, что берет твое время в решении моей проблемы! – Exe Herrera 27.11.2019, 20:32
  • 3
    Привет Exe, Há вознамерившийся о том, чтобы изменить способ хранить консультации?? Я понимаю, что консультации однородные (у них есть те же колонны). Проблема с Договоренностями состоит в том, что в момент объявления их они высказываются с tamañ или я закрепляю, из-за чего он должен иметь в виду каков, это индекс ú ltimo элемент, введенный в компьютер каждой консультацией, и начиная с ahí начинать сохранять новые данные о новой консультации. Смоги размещать пример как Вы захоти увидеть вывод и así мочь смотреть, как решать Ваш инцидент. – isaac 28.11.2019, 01:04

Теги

Похожие вопросы