2017-01-31 1 views
-2

Я хочу найти некоторые конкретные результаты в таблице результатов, используя идентификатор из другой таблицы для вычисления cgpa на основе идентификатора ученика, выбранного из таблицы studentInfo, ниже, , вопрос заключается в том, что он просто вычисляет для первого я бы или скорее студентапрокрутка по набору результатов для поиска другого значения в другой таблице

String lev = levelCombo.getSelectedItem().toString(); 
    int leve = Integer.parseInt(lev); 
    int le = leve/100; 
    try { 
     String sql 
       = "select idNumber from studentInfo where level ='" + lev + "' "; 

     pst = conn.prepareStatement(sql); 
     rs = pst.executeQuery(); 
     while (rs.next()) { 
      String idNumb = rs.getString("idNumber"); 
      cgpa(idNumb, le); 
      System.out.print("" + idNumb); 
     } 
    } catch (Exception e) { 
    } 
} 

public void cgpa(String idnumber, int level) { 
    float units = 0; 
    float ugps = 0; 
    float cgp = 0; 

    for (int i = 1; i <= level; i++) { 
     try { 

      String sql = "select sum(UNIT) ,sum(UGP) ,round(sum(UGP)/NULLIF(sum(UNIT), 0), 2) from Results where ID_NUMBER = ? and level ='" + i + "' "; 

      pst = conn.prepareStatement(sql); 
      pst.setString(1, idnumber); 
      rs = pst.executeQuery(); 
      while (rs.next()) { 
       Float un = rs.getFloat("sum(UNIT)"); 
       Float gp = rs.getFloat("sum(UGP)"); 
       // Float sum=rs.getFloat("round(sum(UGP)/NULLIF(sum(UNIT), 0),2)"); 
       units += un; 
       ugps += gp; 
       cgp = ugps/units; 
       String sql1 = "update academicstatus set cgpa ='" + cgp + "' ,product='" + ugps 
         + "',unit='" + units + "' where idnumber = ? "; 
       updateAcademicstatus(cgp, ugps, units, idnumber); 
       pst = conn.prepareStatement(sql1); 
       pst.setString(1, idnumber); 
       pst.executeUpdate(); 
      } 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } finally { 
      try { 
       rs.close(); 
       pst.close(); 
      } catch (Exception e) { 
      } 
     } 
    } 
} 
+0

В чем проблема, в вашей программе много проблем, вы проверили '}' своего первого метода? –

+0

попытайтесь использовать '} catch (Exception ex) { ex.printStackTrace(); } 'и покажите нам свою проблему? –

+0

извините за}, я просто использовал свой телефон, чтобы загрузить вопрос, на котором мой компьютер выключен, проблема в том, что он просто использует первое значение столбца из первого метода для поиска результатов, но я хочу, чтобы он просматривал все значение столбца –

ответ

0

вы пытаетесь, чтобы один запрос

select sum(UNIT),sum(UGP),round(sum(UGP)/ ULLIF(sum(UNIT),0),2)idNumber from studentInfo sinfo 
join Results re on re.ID_NUMBER = sinfo.idNumber where level='"+lev+"'" 
0

у вас есть проблемы в вашей связи, так что вы используете: prepareStatement внутри цикла, и это создает проблему, потому что tatement не близок, поэтому вам нужно закрыть или создать новое заявление на каждой итерации.

Лучший способ решить проблему заключается в создании отделенный метод, что делать это вещи, как это:

updateAcademicstatus(cgp, ugps, units, idnumber); 

Так updateAcademicstatus должны говорить необходимые параметры, то вы можете сделать ваши обновления, как вы делаете, и в конце закройте свое заявление.

Или вы можете использовать addBatch так в каждой итерации добавить Batch(), как это и в конце концов выполнить ваше заявление:

while(...){ 
    //... 
    pst.addBatch(); 
} 
pst.executeBatch(); 

ПРИМЕЧАНИЕ

Вместо использования cgpa ='" + cgp + "' использовать этот cgpa = ? его более сейф и помощь

Вы можете узнать больше об этом Reusing a PreparedStatement multiple times и Prepared Statement doc

+0

Я постараюсь ... очень полезно Я новичок в Java, пробовал это почти 3 дня –