java
  • loops
  • resultset
  • 2014-11-29 1 views 0 likes 
    0

    У меня есть проблема с этим кодом:JAVA Loop в петли и мульти результирующих наборов закрытия первого набора результатов

    im = stat.executeQuery("SELECT * FROM imones"); 
    
         while (im.next()) { 
    
          sask = stat2.executeQuery("SELECT * FROM saskaitos WHERE imone='" + im.getInt("id") + "'"); 
          while (sask.next()) { 
    
           suma = suma + Integer.parseInt(sask.getString("suma")); 
    
           kvit = stat3.executeQuery("SELECT * FROM kvitai WHERE sask_nr='" + sask.getInt("sask_nr") + "'"); 
           while (kvit.next()) { 
            suma = suma - Integer.parseInt(kvit.getString("suma")); 
           } 
           kvit.close(); 
    
          } 
          sask.close(); 
    
          //if (suma > 0) { 
          imone = im.getString("pav"); 
          skola = suma; 
          DefaultTableModel y = (DefaultTableModel) pagrindinis.visos_skolos_table.getModel(); 
          Vector rowData = new Vector(); 
    
          rowData.add(imone); 
          rowData.add(skola); 
          y.addRow(rowData); 
          //} 
         } 
    
         im.close(); 
    

    я получаю только один цикл (While (im.next())), потому что «» Sask запрос не имеет результатов, и он закрывает «im» resultset, а несколько выражений не помогают. Как я могу заставить этот код работать? Спасибо!

    +0

    Какой язык вы используете? –

    +0

    Я использую язык Java – Rytis

    +0

    О, я понимаю сейчас. Вам нужно либо обеспечить, чтобы 'stat' и' stat2' использовали разные соединения, либо читали все соответствующие данные в 'imones' в Vector, чтобы вы могли перебрать его через соединение с базой данных. –

    ответ

    1

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

    SELECT company.name, 
         SUM(bill.amount) - SUM(cheque.amount) AS amount 
    FROM  imone  AS company 
    INNER JOIN saskaitos AS bill ON company.id = bill.imone 
    LEFT JOIN kvitai AS cheque ON bill.sask_nr = cheque.sask_nr 
    GROUP BY company.name; 
    
    +0

    Это также имеет преимущество, позволяя базе данных иметь дело со всеми записями - работой, для которой она создана. – Robert

    +0

    Спасибо, человек, я был забыт о том, сколько SQL может. Это решило мою проблему. – Rytis

    +0

    Ну, это не решило проблему, потому что, например, если у меня есть 2 чека на один счет, например, счет составляет 1000, а чек - 100 и 200, он возвращает 1700, а не 700, он суммирует один счет два раза из-за двух cheue's. Как это исправить? Спасибо! – Rytis

     Смежные вопросы

    • Нет связанных вопросов^_^